- bnc#935634 - VUL-0: CVE-2015-3259: xen: XSA-137: xl command line
config handling stack overflow 55a62eb0-xl-correct-handling-of-extra_config-in-main_cpupoolcreate.patch - bsc#907514 - Bus fatal error & sles12 sudden reboot has been observed - bsc#910258 - SLES12 Xen host crashes with FATAL NMI after shutdown of guest with VT-d NIC - bsc#918984 - Bus fatal error & sles11-SP4 sudden reboot has been observed - bsc#923967 - Partner-L3: Bus fatal error & sles11-SP3 sudden reboot has been observed 552d293b-x86-vMSI-X-honor-all-mask-requests.patch 552d2966-x86-vMSI-X-add-valid-bits-for-read-acceleration.patch 5576f143-x86-adjust-PV-I-O-emulation-functions-types.patch 55795a52-x86-vMSI-X-support-qword-MMIO-access.patch 5583d9c5-x86-MSI-X-cleanup.patch 5583da09-x86-MSI-track-host-and-guest-masking-separately.patch 55b0a218-x86-PCI-CFG-write-intercept.patch 55b0a255-x86-MSI-X-maskall.patch 55b0a283-x86-MSI-X-teardown.patch 55b0a2ab-x86-MSI-X-enable.patch 55b0a2db-x86-MSI-track-guest-masking.patch - Upstream patches from Jan 552d0f49-x86-traps-identify-the-vcpu-in-context-when-dumping-regs.patch 559bc633-x86-cpupool-clear-proper-cpu_valid-bit-on-CPU-teardown.patch 559bc64e-credit1-properly-deal-with-CPUs-not-in-any-pool.patch 559bc87f-x86-hvmloader-avoid-data-corruption-with-xenstore-rw.patch 55a66a1e-make-rangeset_report_ranges-report-all-ranges.patch 55a77e4f-dmar-device-scope-mem-leak-fix.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=373
This commit is contained in:
parent
b5fb5e90fb
commit
8724a18868
@ -0,0 +1,24 @@
|
|||||||
|
# Commit e59abf8c8c9c1d99a531292c6a548d6dfd0ceacc
|
||||||
|
# Date 2015-04-14 14:59:53 +0200
|
||||||
|
# Author Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
x86/traps: identify the vcpu in context when dumping registers
|
||||||
|
|
||||||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/x86_64/traps.c
|
||||||
|
+++ b/xen/arch/x86/x86_64/traps.c
|
||||||
|
@@ -53,9 +53,11 @@ static void _show_registers(
|
||||||
|
printk("\nRFLAGS: %016lx ", regs->rflags);
|
||||||
|
if ( (context == CTXT_pv_guest) && v && v->vcpu_info )
|
||||||
|
printk("EM: %d ", !!vcpu_info(v, evtchn_upcall_mask));
|
||||||
|
- printk("CONTEXT: %s\n", context_names[context]);
|
||||||
|
+ printk("CONTEXT: %s", context_names[context]);
|
||||||
|
+ if ( v && !is_idle_vcpu(v) )
|
||||||
|
+ printk(" (%pv)", v);
|
||||||
|
|
||||||
|
- printk("rax: %016lx rbx: %016lx rcx: %016lx\n",
|
||||||
|
+ printk("\nrax: %016lx rbx: %016lx rcx: %016lx\n",
|
||||||
|
regs->rax, regs->rbx, regs->rcx);
|
||||||
|
printk("rdx: %016lx rsi: %016lx rdi: %016lx\n",
|
||||||
|
regs->rdx, regs->rsi, regs->rdi);
|
@ -9,8 +9,8 @@ asm/spinlock.h should not be included directly.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/hvm.c 2015-07-08 14:13:16.000000000 +0200
|
--- a/xen/arch/x86/hvm/hvm.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/hvm.c 2015-07-08 14:13:38.000000000 +0200
|
+++ b/xen/arch/x86/hvm/hvm.c
|
||||||
@@ -52,7 +52,6 @@
|
@@ -52,7 +52,6 @@
|
||||||
#include <asm/xstate.h>
|
#include <asm/xstate.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
@ -19,8 +19,8 @@ Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
#include <asm/mce.h>
|
#include <asm/mce.h>
|
||||||
#include <asm/hvm/hvm.h>
|
#include <asm/hvm/hvm.h>
|
||||||
#include <asm/hvm/vpt.h>
|
#include <asm/hvm/vpt.h>
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/svm/svm.c 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/arch/x86/hvm/svm/svm.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/svm/svm.c 2015-07-08 14:13:38.000000000 +0200
|
+++ b/xen/arch/x86/hvm/svm/svm.c
|
||||||
@@ -41,7 +41,6 @@
|
@@ -41,7 +41,6 @@
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
#include <asm/i387.h>
|
#include <asm/i387.h>
|
||||||
@ -29,8 +29,8 @@ Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
#include <asm/hvm/emulate.h>
|
#include <asm/hvm/emulate.h>
|
||||||
#include <asm/hvm/hvm.h>
|
#include <asm/hvm/hvm.h>
|
||||||
#include <asm/hvm/support.h>
|
#include <asm/hvm/support.h>
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/vmx/vmx.c 2015-05-19 23:16:48.000000000 +0200
|
--- a/xen/arch/x86/hvm/vmx/vmx.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/vmx/vmx.c 2015-07-08 14:13:38.000000000 +0200
|
+++ b/xen/arch/x86/hvm/vmx/vmx.c
|
||||||
@@ -35,7 +35,6 @@
|
@@ -35,7 +35,6 @@
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/debugreg.h>
|
#include <asm/debugreg.h>
|
||||||
|
@ -10,8 +10,8 @@ asm/spinlock.h.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/cpu/mtrr/main.c 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/arch/x86/cpu/mtrr/main.c
|
||||||
+++ sle12sp1/xen/arch/x86/cpu/mtrr/main.c 2015-07-08 14:13:42.000000000 +0200
|
+++ b/xen/arch/x86/cpu/mtrr/main.c
|
||||||
@@ -36,6 +36,7 @@
|
@@ -36,6 +36,7 @@
|
||||||
#include <xen/lib.h>
|
#include <xen/lib.h>
|
||||||
#include <xen/smp.h>
|
#include <xen/smp.h>
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit 70a3cbb8c9cb17a61fa25c48ba3d7b44fd059c90
|
# Commit 70a3cbb8c9cb17a61fa25c48ba3d7b44fd059c90
|
||||||
# Date 2015-04-14 16:50:35 +0200
|
# Date 2015-04-14 16:50:35 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -24,8 +26,8 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/vmsi.c 2015-07-08 11:22:13.000000000 +0200
|
--- a/xen/arch/x86/hvm/vmsi.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/vmsi.c 2015-04-20 09:30:29.000000000 +0200
|
+++ b/xen/arch/x86/hvm/vmsi.c
|
||||||
@@ -286,11 +286,11 @@ static int msixtbl_write(struct vcpu *v,
|
@@ -286,11 +286,11 @@ static int msixtbl_write(struct vcpu *v,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit df9f5676b3711c95127d44e871ad7ca38d6ed28a
|
# Commit df9f5676b3711c95127d44e871ad7ca38d6ed28a
|
||||||
# Date 2015-04-14 16:51:18 +0200
|
# Date 2015-04-14 16:51:18 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -15,8 +17,8 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/vmsi.c 2015-04-20 09:30:29.000000000 +0200
|
--- a/xen/arch/x86/hvm/vmsi.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/vmsi.c 2015-04-20 09:32:57.000000000 +0200
|
+++ b/xen/arch/x86/hvm/vmsi.c
|
||||||
@@ -154,11 +154,14 @@ struct msixtbl_entry
|
@@ -154,11 +154,14 @@ struct msixtbl_entry
|
||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
unsigned long gtable; /* gpa of msix table */
|
unsigned long gtable; /* gpa of msix table */
|
||||||
|
@ -11,8 +11,8 @@ This is needed to implement ticket locks.
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/system.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-x86/system.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/system.h 2015-07-08 12:35:11.000000000 +0200
|
+++ b/xen/include/asm-x86/system.h
|
||||||
@@ -118,6 +118,52 @@ static always_inline unsigned long __cmp
|
@@ -118,6 +118,52 @@ static always_inline unsigned long __cmp
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@ This is needed to implement ticket locks.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/system.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/system.h
|
||||||
+++ sle12sp1/xen/include/asm-arm/system.h 2015-07-08 12:35:16.000000000 +0200
|
+++ b/xen/include/asm-arm/system.h
|
||||||
@@ -51,6 +51,8 @@
|
@@ -51,6 +51,8 @@
|
||||||
# error "unknown ARM variant"
|
# error "unknown ARM variant"
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,8 +12,8 @@ does not affect the tail ticket.
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/atomic.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-x86/atomic.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/atomic.h 2015-07-08 12:35:20.000000000 +0200
|
+++ b/xen/include/asm-x86/atomic.h
|
||||||
@@ -14,6 +14,14 @@ static inline void name(volatile type *a
|
@@ -14,6 +14,14 @@ static inline void name(volatile type *a
|
||||||
{ asm volatile("mov" size " %1,%0": "=m" (*(volatile type *)addr) \
|
{ asm volatile("mov" size " %1,%0": "=m" (*(volatile type *)addr) \
|
||||||
:reg (val) barrier); }
|
:reg (val) barrier); }
|
||||||
|
@ -13,8 +13,8 @@ does not affect the tail ticket.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/atomic.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/atomic.h
|
||||||
+++ sle12sp1/xen/include/asm-arm/atomic.h 2015-07-08 12:35:55.000000000 +0200
|
+++ b/xen/include/asm-arm/atomic.h
|
||||||
@@ -23,6 +23,17 @@ static inline void name(volatile type *a
|
@@ -23,6 +23,17 @@ static inline void name(volatile type *a
|
||||||
: reg (val)); \
|
: reg (val)); \
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
+ default: __bad_atomic_size(); break; \
|
+ default: __bad_atomic_size(); break; \
|
||||||
+ } \
|
+ } \
|
||||||
+})
|
+})
|
||||||
+
|
+
|
||||||
/*
|
/*
|
||||||
* NB. I've pushed the volatile qualifier into the operations. This allows
|
* NB. I've pushed the volatile qualifier into the operations. This allows
|
||||||
* fast accessors such as _atomic_read() and _atomic_set() which don't give
|
* fast accessors such as _atomic_read() and _atomic_set() which don't give
|
||||||
|
@ -25,8 +25,8 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
Reviewed-by: Tim Deegan <tim@xen.org>
|
Reviewed-by: Tim Deegan <tim@xen.org>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/spinlock.c 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/common/spinlock.c
|
||||||
+++ sle12sp1/xen/common/spinlock.c 2015-07-08 12:37:59.000000000 +0200
|
+++ b/xen/common/spinlock.c
|
||||||
@@ -115,125 +115,134 @@ void spin_debug_disable(void)
|
@@ -115,125 +115,134 @@ void spin_debug_disable(void)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -229,8 +229,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _spin_unlock_recursive(spinlock_t *lock)
|
void _spin_unlock_recursive(spinlock_t *lock)
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/system.h 2015-07-08 12:35:16.000000000 +0200
|
--- a/xen/include/asm-arm/system.h
|
||||||
+++ sle12sp1/xen/include/asm-arm/system.h 2015-07-08 12:37:59.000000000 +0200
|
+++ b/xen/include/asm-arm/system.h
|
||||||
@@ -53,6 +53,9 @@
|
@@ -53,6 +53,9 @@
|
||||||
|
|
||||||
#define arch_fetch_and_add(x, v) __sync_fetch_and_add(x, v)
|
#define arch_fetch_and_add(x, v) __sync_fetch_and_add(x, v)
|
||||||
@ -241,8 +241,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
extern struct vcpu *__context_switch(struct vcpu *prev, struct vcpu *next);
|
extern struct vcpu *__context_switch(struct vcpu *prev, struct vcpu *next);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/system.h 2015-07-08 12:35:11.000000000 +0200
|
--- a/xen/include/asm-x86/system.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/system.h 2015-07-08 12:37:59.000000000 +0200
|
+++ b/xen/include/asm-x86/system.h
|
||||||
@@ -185,6 +185,17 @@ static always_inline unsigned long __xad
|
@@ -185,6 +185,17 @@ static always_inline unsigned long __xad
|
||||||
#define set_mb(var, value) do { xchg(&var, value); } while (0)
|
#define set_mb(var, value) do { xchg(&var, value); } while (0)
|
||||||
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
|
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
|
||||||
@ -261,8 +261,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
#define local_irq_disable() asm volatile ( "cli" : : : "memory" )
|
#define local_irq_disable() asm volatile ( "cli" : : : "memory" )
|
||||||
#define local_irq_enable() asm volatile ( "sti" : : : "memory" )
|
#define local_irq_enable() asm volatile ( "sti" : : : "memory" )
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/xen/spinlock.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/xen/spinlock.h
|
||||||
+++ sle12sp1/xen/include/xen/spinlock.h 2015-07-08 12:37:59.000000000 +0200
|
+++ b/xen/include/xen/spinlock.h
|
||||||
@@ -80,8 +80,7 @@ struct lock_profile_qhead {
|
@@ -80,8 +80,7 @@ struct lock_profile_qhead {
|
||||||
static struct lock_profile *__lock_profile_##name \
|
static struct lock_profile *__lock_profile_##name \
|
||||||
__used_section(".lockprofile.data") = \
|
__used_section(".lockprofile.data") = \
|
||||||
|
@ -12,8 +12,8 @@ Reviewed-by: Tim Deegan <tim@xen.org>
|
|||||||
Acked-by: Jan Beulich <jbeulich@suse.com>
|
Acked-by: Jan Beulich <jbeulich@suse.com>
|
||||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/arm/README.LinuxPrimitives 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/arch/arm/README.LinuxPrimitives
|
||||||
+++ sle12sp1/xen/arch/arm/README.LinuxPrimitives 2015-07-08 12:41:16.000000000 +0200
|
+++ b/xen/arch/arm/README.LinuxPrimitives
|
||||||
@@ -25,16 +25,6 @@ linux/arch/arm64/include/asm/atomic.h
|
@@ -25,16 +25,6 @@ linux/arch/arm64/include/asm/atomic.h
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@ -56,8 +56,8 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
mem*: last sync @ v3.16-rc6 (last commit: d98b90ea22b0)
|
mem*: last sync @ v3.16-rc6 (last commit: d98b90ea22b0)
|
||||||
|
|
||||||
linux/arch/arm/lib/copy_template.S xen/arch/arm/arm32/lib/copy_template.S
|
linux/arch/arm/lib/copy_template.S xen/arch/arm/arm32/lib/copy_template.S
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/arm32/spinlock.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/arm32/spinlock.h
|
||||||
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
|
+++ /dev/null
|
||||||
@@ -1,66 +0,0 @@
|
@@ -1,66 +0,0 @@
|
||||||
-#ifndef __ASM_ARM32_SPINLOCK_H
|
-#ifndef __ASM_ARM32_SPINLOCK_H
|
||||||
-#define __ASM_ARM32_SPINLOCK_H
|
-#define __ASM_ARM32_SPINLOCK_H
|
||||||
@ -125,8 +125,8 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
- * indent-tabs-mode: nil
|
- * indent-tabs-mode: nil
|
||||||
- * End:
|
- * End:
|
||||||
- */
|
- */
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/arm64/spinlock.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/arm64/spinlock.h
|
||||||
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
|
+++ /dev/null
|
||||||
@@ -1,63 +0,0 @@
|
@@ -1,63 +0,0 @@
|
||||||
-/*
|
-/*
|
||||||
- * Derived from Linux arch64 spinlock.h which is:
|
- * Derived from Linux arch64 spinlock.h which is:
|
||||||
@ -191,8 +191,8 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
- * indent-tabs-mode: nil
|
- * indent-tabs-mode: nil
|
||||||
- * End:
|
- * End:
|
||||||
- */
|
- */
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/spinlock.h 2013-07-09 20:57:12.000000000 +0200
|
--- a/xen/include/asm-arm/spinlock.h
|
||||||
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
|
+++ /dev/null
|
||||||
@@ -1,23 +0,0 @@
|
@@ -1,23 +0,0 @@
|
||||||
-#ifndef __ASM_SPINLOCK_H
|
-#ifndef __ASM_SPINLOCK_H
|
||||||
-#define __ASM_SPINLOCK_H
|
-#define __ASM_SPINLOCK_H
|
||||||
@ -217,8 +217,8 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
- * indent-tabs-mode: nil
|
- * indent-tabs-mode: nil
|
||||||
- * End:
|
- * End:
|
||||||
- */
|
- */
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/spinlock.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-x86/spinlock.h
|
||||||
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
|
+++ /dev/null
|
||||||
@@ -1,34 +0,0 @@
|
@@ -1,34 +0,0 @@
|
||||||
-#ifndef __ASM_SPINLOCK_H
|
-#ifndef __ASM_SPINLOCK_H
|
||||||
-#define __ASM_SPINLOCK_H
|
-#define __ASM_SPINLOCK_H
|
||||||
@ -254,8 +254,8 @@ Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
|||||||
-}
|
-}
|
||||||
-
|
-
|
||||||
-#endif /* __ASM_SPINLOCK_H */
|
-#endif /* __ASM_SPINLOCK_H */
|
||||||
--- sle12sp1.orig/xen/include/xen/spinlock.h 2015-07-08 12:37:59.000000000 +0200
|
--- a/xen/include/xen/spinlock.h
|
||||||
+++ sle12sp1/xen/include/xen/spinlock.h 2015-07-08 12:41:16.000000000 +0200
|
+++ b/xen/include/xen/spinlock.h
|
||||||
@@ -2,7 +2,6 @@
|
@@ -2,7 +2,6 @@
|
||||||
#define __SPINLOCK_H__
|
#define __SPINLOCK_H__
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ Tested-by: Wei Liu <wei.liu2@citrix.com>
|
|||||||
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
|
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
|
||||||
Acked-by: Tim Deegan <tim@xen.org>
|
Acked-by: Tim Deegan <tim@xen.org>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/vmap.c 2013-10-31 22:33:32.000000000 +0100
|
--- a/xen/common/vmap.c
|
||||||
+++ sle12sp1/xen/common/vmap.c 2015-07-08 14:18:50.000000000 +0200
|
+++ b/xen/common/vmap.c
|
||||||
@@ -215,4 +215,75 @@ void vunmap(const void *va)
|
@@ -215,4 +215,75 @@ void vunmap(const void *va)
|
||||||
#endif
|
#endif
|
||||||
vm_free(va);
|
vm_free(va);
|
||||||
@ -105,8 +105,8 @@ Acked-by: Tim Deegan <tim@xen.org>
|
|||||||
+ free_domheap_page(pg);
|
+ free_domheap_page(pg);
|
||||||
+}
|
+}
|
||||||
#endif
|
#endif
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/mm.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/mm.h
|
||||||
+++ sle12sp1/xen/include/asm-arm/mm.h 2015-07-08 14:18:50.000000000 +0200
|
+++ b/xen/include/asm-arm/mm.h
|
||||||
@@ -208,6 +208,8 @@ static inline void __iomem *ioremap_wc(p
|
@@ -208,6 +208,8 @@ static inline void __iomem *ioremap_wc(p
|
||||||
#define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT)
|
#define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT)
|
||||||
#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT))
|
#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT))
|
||||||
@ -116,8 +116,8 @@ Acked-by: Tim Deegan <tim@xen.org>
|
|||||||
|
|
||||||
/* Page-align address and convert to frame number format */
|
/* Page-align address and convert to frame number format */
|
||||||
#define paddr_to_pfn_aligned(paddr) paddr_to_pfn(PAGE_ALIGN(paddr))
|
#define paddr_to_pfn_aligned(paddr) paddr_to_pfn(PAGE_ALIGN(paddr))
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/page.h 2015-06-03 16:55:05.000000000 +0200
|
--- a/xen/include/asm-x86/page.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/page.h 2015-07-08 14:18:50.000000000 +0200
|
+++ b/xen/include/asm-x86/page.h
|
||||||
@@ -262,6 +262,8 @@ void copy_page_sse2(void *, const void *
|
@@ -262,6 +262,8 @@ void copy_page_sse2(void *, const void *
|
||||||
#define pfn_to_paddr(pfn) __pfn_to_paddr(pfn)
|
#define pfn_to_paddr(pfn) __pfn_to_paddr(pfn)
|
||||||
#define paddr_to_pfn(pa) __paddr_to_pfn(pa)
|
#define paddr_to_pfn(pa) __paddr_to_pfn(pa)
|
||||||
@ -127,8 +127,8 @@ Acked-by: Tim Deegan <tim@xen.org>
|
|||||||
|
|
||||||
#endif /* !defined(__ASSEMBLY__) */
|
#endif /* !defined(__ASSEMBLY__) */
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/xen/vmap.h 2013-07-09 20:57:12.000000000 +0200
|
--- a/xen/include/xen/vmap.h
|
||||||
+++ sle12sp1/xen/include/xen/vmap.h 2015-07-08 14:18:50.000000000 +0200
|
+++ b/xen/include/xen/vmap.h
|
||||||
@@ -11,6 +11,9 @@ void *__vmap(const unsigned long *mfn, u
|
@@ -11,6 +11,9 @@ void *__vmap(const unsigned long *mfn, u
|
||||||
unsigned int nr, unsigned int align, unsigned int flags);
|
unsigned int nr, unsigned int align, unsigned int flags);
|
||||||
void *vmap(const unsigned long *mfn, unsigned int nr);
|
void *vmap(const unsigned long *mfn, unsigned int nr);
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit 85baced14dec2fafa9fe560969dba2ae28e8bebb
|
# Commit 85baced14dec2fafa9fe560969dba2ae28e8bebb
|
||||||
# Date 2015-06-09 15:59:31 +0200
|
# Date 2015-06-09 15:59:31 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -42,8 +44,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
Backport stripped down to just the pci_cfg_ok() adjustments.
|
Backport stripped down to just the pci_cfg_ok() adjustments.
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/traps.c 2015-07-08 14:13:16.000000000 +0200
|
--- a/xen/arch/x86/traps.c
|
||||||
+++ sle12sp1/xen/arch/x86/traps.c 2015-07-08 11:43:22.000000000 +0200
|
+++ b/xen/arch/x86/traps.c
|
||||||
@@ -1708,14 +1708,18 @@ static int admin_io_okay(
|
@@ -1708,14 +1708,18 @@ static int admin_io_okay(
|
||||||
return ioports_access_permitted(v->domain, port, port + bytes - 1);
|
return ioports_access_permitted(v->domain, port, port + bytes - 1);
|
||||||
}
|
}
|
||||||
@ -114,9 +116,9 @@ Backport stripped down to just the pci_cfg_ok() adjustments.
|
|||||||
pci_conf_write(v->domain->arch.pci_cf8, port & 3, size, data);
|
pci_conf_write(v->domain->arch.pci_cf8, port & 3, size, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/hvm.c 2015-07-08 14:13:38.000000000 +0200
|
--- a/xen/arch/x86/hvm/hvm.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/hvm.c 2015-07-08 11:43:22.000000000 +0200
|
+++ b/xen/arch/x86/hvm/hvm.c
|
||||||
@@ -2356,11 +2356,6 @@ void hvm_vcpu_down(struct vcpu *v)
|
@@ -2357,11 +2357,6 @@ void hvm_vcpu_down(struct vcpu *v)
|
||||||
static struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d,
|
static struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d,
|
||||||
ioreq_t *p)
|
ioreq_t *p)
|
||||||
{
|
{
|
||||||
@ -128,7 +130,7 @@ Backport stripped down to just the pci_cfg_ok() adjustments.
|
|||||||
struct hvm_ioreq_server *s;
|
struct hvm_ioreq_server *s;
|
||||||
uint32_t cf8;
|
uint32_t cf8;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
@@ -2445,11 +2440,6 @@ static struct hvm_ioreq_server *hvm_sele
|
@@ -2446,11 +2441,6 @@ static struct hvm_ioreq_server *hvm_sele
|
||||||
}
|
}
|
||||||
|
|
||||||
return d->arch.hvm_domain.default_ioreq_server;
|
return d->arch.hvm_domain.default_ioreq_server;
|
||||||
@ -140,8 +142,8 @@ Backport stripped down to just the pci_cfg_ok() adjustments.
|
|||||||
}
|
}
|
||||||
|
|
||||||
int hvm_buffered_io_send(ioreq_t *p)
|
int hvm_buffered_io_send(ioreq_t *p)
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/pci.h 2015-07-08 14:13:16.000000000 +0200
|
--- a/xen/include/asm-x86/pci.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/pci.h 2015-07-08 11:43:22.000000000 +0200
|
+++ b/xen/include/asm-x86/pci.h
|
||||||
@@ -1,6 +1,11 @@
|
@@ -1,6 +1,11 @@
|
||||||
#ifndef __X86_PCI_H__
|
#ifndef __X86_PCI_H__
|
||||||
#define __X86_PCI_H__
|
#define __X86_PCI_H__
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit 284ffb4f9b0d5c3a33c4c5bd87645d0cc342ca96
|
# Commit 284ffb4f9b0d5c3a33c4c5bd87645d0cc342ca96
|
||||||
# Date 2015-06-11 11:52:18 +0200
|
# Date 2015-06-11 11:52:18 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -49,7 +51,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
r = X86EMUL_OKAY;
|
r = X86EMUL_OKAY;
|
||||||
@@ -268,7 +280,7 @@ static int msixtbl_write(struct vcpu *v, unsigned long address,
|
@@ -268,7 +280,7 @@ static int msixtbl_write(struct vcpu *v,
|
||||||
unsigned long flags, orig;
|
unsigned long flags, orig;
|
||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
|
|
||||||
@ -58,7 +60,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
return r;
|
return r;
|
||||||
|
|
||||||
rcu_read_lock(&msixtbl_rcu_lock);
|
rcu_read_lock(&msixtbl_rcu_lock);
|
||||||
@@ -279,16 +291,23 @@ static int msixtbl_write(struct vcpu *v, unsigned long address,
|
@@ -279,16 +291,23 @@ static int msixtbl_write(struct vcpu *v,
|
||||||
nr_entry = (address - entry->gtable) / PCI_MSIX_ENTRY_SIZE;
|
nr_entry = (address - entry->gtable) / PCI_MSIX_ENTRY_SIZE;
|
||||||
|
|
||||||
offset = address & (PCI_MSIX_ENTRY_SIZE - 1);
|
offset = address & (PCI_MSIX_ENTRY_SIZE - 1);
|
||||||
@ -85,7 +87,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Exit to device model when unmasking and address/data got modified. */
|
/* Exit to device model when unmasking and address/data got modified. */
|
||||||
@@ -352,7 +371,8 @@ static int msixtbl_write(struct vcpu *v, unsigned long address,
|
@@ -352,7 +371,8 @@ static int msixtbl_write(struct vcpu *v,
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
spin_unlock_irqrestore(&desc->lock, flags);
|
spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
|
@ -17,8 +17,8 @@ Based on a patch originally by Matt Wilson <msw@amazon.com>.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/docs/misc/grant-tables.txt 2008-10-14 19:44:06.000000000 +0200
|
--- a/docs/misc/grant-tables.txt
|
||||||
+++ sle12sp1/docs/misc/grant-tables.txt 2015-07-08 13:49:42.000000000 +0200
|
+++ b/docs/misc/grant-tables.txt
|
||||||
@@ -63,6 +63,7 @@ is complete.
|
@@ -63,6 +63,7 @@ is complete.
|
||||||
act->domid : remote domain being granted rights
|
act->domid : remote domain being granted rights
|
||||||
act->frame : machine frame being granted
|
act->frame : machine frame being granted
|
||||||
@ -75,8 +75,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/grant_table.c 2015-06-26 15:38:17.000000000 +0200
|
--- a/xen/common/grant_table.c
|
||||||
+++ sle12sp1/xen/common/grant_table.c 2015-07-08 13:49:42.000000000 +0200
|
+++ b/xen/common/grant_table.c
|
||||||
@@ -157,10 +157,13 @@ struct active_grant_entry {
|
@@ -157,10 +157,13 @@ struct active_grant_entry {
|
||||||
in the page. */
|
in the page. */
|
||||||
unsigned length:16; /* For sub-page grants, the length of the
|
unsigned length:16; /* For sub-page grants, the length of the
|
||||||
|
@ -12,8 +12,8 @@ Based on a patch originally by Matt Wilson <msw@amazon.com>.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/docs/misc/grant-tables.txt 2015-07-08 13:49:42.000000000 +0200
|
--- a/docs/misc/grant-tables.txt
|
||||||
+++ sle12sp1/docs/misc/grant-tables.txt 2015-07-08 13:49:46.000000000 +0200
|
+++ b/docs/misc/grant-tables.txt
|
||||||
@@ -87,6 +87,7 @@ is complete.
|
@@ -87,6 +87,7 @@ is complete.
|
||||||
inconsistent grant table state such as current
|
inconsistent grant table state such as current
|
||||||
version, partially initialized active table pages,
|
version, partially initialized active table pages,
|
||||||
@ -32,8 +32,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
Active entries are obtained by calling active_entry_acquire(gt, ref).
|
Active entries are obtained by calling active_entry_acquire(gt, ref).
|
||||||
This function returns a pointer to the active entry after locking its
|
This function returns a pointer to the active entry after locking its
|
||||||
spinlock. The caller must hold the grant table lock for the gt in
|
spinlock. The caller must hold the grant table lock for the gt in
|
||||||
--- sle12sp1.orig/xen/common/grant_table.c 2015-07-08 13:49:42.000000000 +0200
|
--- a/xen/common/grant_table.c
|
||||||
+++ sle12sp1/xen/common/grant_table.c 2015-07-08 13:49:46.000000000 +0200
|
+++ b/xen/common/grant_table.c
|
||||||
@@ -288,10 +288,10 @@ static inline void
|
@@ -288,10 +288,10 @@ static inline void
|
||||||
put_maptrack_handle(
|
put_maptrack_handle(
|
||||||
struct grant_table *t, int handle)
|
struct grant_table *t, int handle)
|
||||||
@ -73,8 +73,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
t->nr_grant_frames = INITIAL_NR_GRANT_FRAMES;
|
t->nr_grant_frames = INITIAL_NR_GRANT_FRAMES;
|
||||||
|
|
||||||
/* Active grant table. */
|
/* Active grant table. */
|
||||||
--- sle12sp1.orig/xen/include/xen/grant_table.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/xen/grant_table.h
|
||||||
+++ sle12sp1/xen/include/xen/grant_table.h 2015-07-08 13:49:46.000000000 +0200
|
+++ b/xen/include/xen/grant_table.h
|
||||||
@@ -82,6 +82,8 @@ struct grant_table {
|
@@ -82,6 +82,8 @@ struct grant_table {
|
||||||
struct grant_mapping **maptrack;
|
struct grant_mapping **maptrack;
|
||||||
unsigned int maptrack_head;
|
unsigned int maptrack_head;
|
||||||
|
@ -23,8 +23,8 @@ Based on a patch originally by Matt Wilson <msw@amazon.com>.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/docs/misc/grant-tables.txt 2015-07-08 13:49:46.000000000 +0200
|
--- a/docs/misc/grant-tables.txt
|
||||||
+++ sle12sp1/docs/misc/grant-tables.txt 2015-07-08 13:49:47.000000000 +0200
|
+++ b/docs/misc/grant-tables.txt
|
||||||
@@ -83,7 +83,7 @@ is complete.
|
@@ -83,7 +83,7 @@ is complete.
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
Xen uses several locks to serialize access to the internal grant table state.
|
Xen uses several locks to serialize access to the internal grant table state.
|
||||||
@ -91,8 +91,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/arm/mm.c 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/arch/arm/mm.c
|
||||||
+++ sle12sp1/xen/arch/arm/mm.c 2015-07-08 13:49:47.000000000 +0200
|
+++ b/xen/arch/arm/mm.c
|
||||||
@@ -1037,7 +1037,7 @@ int xenmem_add_to_physmap_one(
|
@@ -1037,7 +1037,7 @@ int xenmem_add_to_physmap_one(
|
||||||
switch ( space )
|
switch ( space )
|
||||||
{
|
{
|
||||||
@ -111,9 +111,9 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
break;
|
break;
|
||||||
case XENMAPSPACE_shared_info:
|
case XENMAPSPACE_shared_info:
|
||||||
if ( idx != 0 )
|
if ( idx != 0 )
|
||||||
--- sle12sp1.orig/xen/arch/x86/mm.c 2015-07-08 00:00:00.000000000 +0200
|
--- a/xen/arch/x86/mm.c
|
||||||
+++ sle12sp1/xen/arch/x86/mm.c 2015-07-08 13:49:47.000000000 +0200
|
+++ b/xen/arch/x86/mm.c
|
||||||
@@ -4594,7 +4594,7 @@ int xenmem_add_to_physmap_one(
|
@@ -4587,7 +4587,7 @@ int xenmem_add_to_physmap_one(
|
||||||
mfn = virt_to_mfn(d->shared_info);
|
mfn = virt_to_mfn(d->shared_info);
|
||||||
break;
|
break;
|
||||||
case XENMAPSPACE_grant_table:
|
case XENMAPSPACE_grant_table:
|
||||||
@ -122,7 +122,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
if ( d->grant_table->gt_version == 0 )
|
if ( d->grant_table->gt_version == 0 )
|
||||||
d->grant_table->gt_version = 1;
|
d->grant_table->gt_version = 1;
|
||||||
@@ -4616,7 +4616,7 @@ int xenmem_add_to_physmap_one(
|
@@ -4609,7 +4609,7 @@ int xenmem_add_to_physmap_one(
|
||||||
mfn = virt_to_mfn(d->grant_table->shared_raw[idx]);
|
mfn = virt_to_mfn(d->grant_table->shared_raw[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,8 +131,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
break;
|
break;
|
||||||
case XENMAPSPACE_gmfn_range:
|
case XENMAPSPACE_gmfn_range:
|
||||||
case XENMAPSPACE_gmfn:
|
case XENMAPSPACE_gmfn:
|
||||||
--- sle12sp1.orig/xen/common/grant_table.c 2015-07-08 13:49:46.000000000 +0200
|
--- a/xen/common/grant_table.c
|
||||||
+++ sle12sp1/xen/common/grant_table.c 2015-07-08 13:49:47.000000000 +0200
|
+++ b/xen/common/grant_table.c
|
||||||
@@ -196,7 +196,7 @@ active_entry_acquire(struct grant_table
|
@@ -196,7 +196,7 @@ active_entry_acquire(struct grant_table
|
||||||
{
|
{
|
||||||
struct active_grant_entry *act;
|
struct active_grant_entry *act;
|
||||||
@ -699,8 +699,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
if ( first )
|
if ( first )
|
||||||
printk("grant-table for remote domain:%5d ... "
|
printk("grant-table for remote domain:%5d ... "
|
||||||
--- sle12sp1.orig/xen/include/xen/grant_table.h 2015-07-08 13:49:46.000000000 +0200
|
--- a/xen/include/xen/grant_table.h
|
||||||
+++ sle12sp1/xen/include/xen/grant_table.h 2015-07-08 13:49:47.000000000 +0200
|
+++ b/xen/include/xen/grant_table.h
|
||||||
@@ -64,6 +64,11 @@ struct grant_mapping {
|
@@ -64,6 +64,11 @@ struct grant_mapping {
|
||||||
|
|
||||||
/* Per-domain grant information. */
|
/* Per-domain grant information. */
|
||||||
|
@ -9,8 +9,8 @@ the code into a free_evtchn() function.
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 12:33:47.000000000 +0200
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-08 13:53:49.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
@@ -194,6 +194,17 @@ static int get_free_port(struct domain *
|
@@ -194,6 +194,17 @@ static int get_free_port(struct domain *
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
|
|
||||||
static long evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc)
|
static long evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc)
|
||||||
{
|
{
|
||||||
@@ -571,14 +582,7 @@ static long __evtchn_close(struct domain
|
@@ -568,14 +579,7 @@ static long __evtchn_close(struct domain
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,10 +13,8 @@ will be useful later).
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
Index: xen-4.5.1-testing/xen/common/event_channel.c
|
--- a/xen/common/event_channel.c
|
||||||
===================================================================
|
+++ b/xen/common/event_channel.c
|
||||||
--- xen-4.5.1-testing.orig/xen/common/event_channel.c
|
|
||||||
+++ xen-4.5.1-testing/xen/common/event_channel.c
|
|
||||||
@@ -191,6 +191,8 @@ static int get_free_port(struct domain *
|
@@ -191,6 +191,8 @@ static int get_free_port(struct domain *
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
bucket_from_port(d, port) = chn;
|
bucket_from_port(d, port) = chn;
|
||||||
@ -26,7 +24,7 @@ Index: xen-4.5.1-testing/xen/common/event_channel.c
|
|||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1267,6 +1269,7 @@ int evtchn_init(struct domain *d)
|
@@ -1264,6 +1266,7 @@ int evtchn_init(struct domain *d)
|
||||||
d->evtchn = alloc_evtchn_bucket(d, 0);
|
d->evtchn = alloc_evtchn_bucket(d, 0);
|
||||||
if ( !d->evtchn )
|
if ( !d->evtchn )
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -34,10 +32,8 @@ Index: xen-4.5.1-testing/xen/common/event_channel.c
|
|||||||
|
|
||||||
spin_lock_init(&d->event_lock);
|
spin_lock_init(&d->event_lock);
|
||||||
if ( get_free_port(d) != 0 )
|
if ( get_free_port(d) != 0 )
|
||||||
Index: xen-4.5.1-testing/xen/include/xen/event.h
|
--- a/xen/include/xen/event.h
|
||||||
===================================================================
|
+++ b/xen/include/xen/event.h
|
||||||
--- xen-4.5.1-testing.orig/xen/include/xen/event.h
|
|
||||||
+++ xen-4.5.1-testing/xen/include/xen/event.h
|
|
||||||
@@ -90,11 +90,7 @@ static inline bool_t port_is_valid(struc
|
@@ -90,11 +90,7 @@ static inline bool_t port_is_valid(struc
|
||||||
{
|
{
|
||||||
if ( p >= d->max_evtchns )
|
if ( p >= d->max_evtchns )
|
||||||
@ -51,11 +47,9 @@ Index: xen-4.5.1-testing/xen/include/xen/event.h
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct evtchn *evtchn_from_port(struct domain *d, unsigned int p)
|
static inline struct evtchn *evtchn_from_port(struct domain *d, unsigned int p)
|
||||||
Index: xen-4.5.1-testing/xen/include/xen/sched.h
|
--- a/xen/include/xen/sched.h
|
||||||
===================================================================
|
+++ b/xen/include/xen/sched.h
|
||||||
--- xen-4.5.1-testing.orig/xen/include/xen/sched.h
|
@@ -339,8 +339,9 @@ struct domain
|
||||||
+++ xen-4.5.1-testing/xen/include/xen/sched.h
|
|
||||||
@@ -335,8 +335,9 @@ struct domain
|
|
||||||
/* Event channel information. */
|
/* Event channel information. */
|
||||||
struct evtchn *evtchn; /* first bucket only */
|
struct evtchn *evtchn; /* first bucket only */
|
||||||
struct evtchn **evtchn_group[NR_EVTCHN_GROUPS]; /* all other buckets */
|
struct evtchn **evtchn_group[NR_EVTCHN_GROUPS]; /* all other buckets */
|
||||||
|
@ -9,9 +9,9 @@ valid.
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 13:53:50.000000000 +0200
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-08 13:54:42.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
@@ -934,8 +934,6 @@ int evtchn_unmask(unsigned int port)
|
@@ -931,8 +931,6 @@ int evtchn_unmask(unsigned int port)
|
||||||
struct domain *d = current->domain;
|
struct domain *d = current->domain;
|
||||||
struct evtchn *evtchn;
|
struct evtchn *evtchn;
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
if ( unlikely(!port_is_valid(d, port)) )
|
if ( unlikely(!port_is_valid(d, port)) )
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@@ -1102,9 +1100,7 @@ long do_event_channel_op(int cmd, XEN_GU
|
@@ -1099,9 +1097,7 @@ long do_event_channel_op(int cmd, XEN_GU
|
||||||
struct evtchn_unmask unmask;
|
struct evtchn_unmask unmask;
|
||||||
if ( copy_from_guest(&unmask, arg, 1) != 0 )
|
if ( copy_from_guest(&unmask, arg, 1) != 0 )
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit 236e13ce60e1c0eb0535ad258e74a3789bc0d074
|
# Commit 236e13ce60e1c0eb0535ad258e74a3789bc0d074
|
||||||
# Date 2015-06-19 10:58:45 +0200
|
# Date 2015-06-19 10:58:45 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -28,7 +30,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
/* bitmap indicate which fixed map is free */
|
/* bitmap indicate which fixed map is free */
|
||||||
static DEFINE_SPINLOCK(msix_fixmap_lock);
|
static DEFINE_SPINLOCK(msix_fixmap_lock);
|
||||||
static DECLARE_BITMAP(msix_fixmap_pages, FIX_MSIX_MAX_PAGES);
|
static DECLARE_BITMAP(msix_fixmap_pages, FIX_MSIX_MAX_PAGES);
|
||||||
@@ -129,12 +131,14 @@ void msi_compose_msg(unsigned vector, const cpumask_t *cpu_mask, struct msi_msg
|
@@ -129,12 +131,14 @@ void msi_compose_msg(unsigned vector, co
|
||||||
unsigned dest;
|
unsigned dest;
|
||||||
|
|
||||||
memset(msg, 0, sizeof(*msg));
|
memset(msg, 0, sizeof(*msg));
|
||||||
@ -45,7 +47,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
cpumask_t *mask = this_cpu(scratch_mask);
|
cpumask_t *mask = this_cpu(scratch_mask);
|
||||||
|
|
||||||
cpumask_and(mask, cpu_mask, &cpu_online_map);
|
cpumask_and(mask, cpu_mask, &cpu_online_map);
|
||||||
@@ -195,8 +199,7 @@ static void read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
|
@@ -195,8 +199,7 @@ static void read_msi_msg(struct msi_desc
|
||||||
}
|
}
|
||||||
case PCI_CAP_ID_MSIX:
|
case PCI_CAP_ID_MSIX:
|
||||||
{
|
{
|
||||||
@ -55,7 +57,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
|
msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
|
||||||
msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET);
|
msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR_OFFSET);
|
||||||
@@ -257,8 +260,7 @@ static int write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
|
@@ -257,8 +260,7 @@ static int write_msi_msg(struct msi_desc
|
||||||
}
|
}
|
||||||
case PCI_CAP_ID_MSIX:
|
case PCI_CAP_ID_MSIX:
|
||||||
{
|
{
|
||||||
@ -65,7 +67,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
writel(msg->address_lo,
|
writel(msg->address_lo,
|
||||||
base + PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
|
base + PCI_MSIX_ENTRY_LOWER_ADDR_OFFSET);
|
||||||
@@ -281,7 +283,7 @@ void set_msi_affinity(struct irq_desc *desc, const cpumask_t *mask)
|
@@ -281,7 +283,7 @@ void set_msi_affinity(struct irq_desc *d
|
||||||
struct msi_desc *msi_desc = desc->msi_desc;
|
struct msi_desc *msi_desc = desc->msi_desc;
|
||||||
|
|
||||||
dest = set_desc_affinity(desc, mask);
|
dest = set_desc_affinity(desc, mask);
|
||||||
@ -74,7 +76,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
ASSERT(spin_is_locked(&desc->lock));
|
ASSERT(spin_is_locked(&desc->lock));
|
||||||
@@ -332,11 +334,11 @@ static void msix_set_enable(struct pci_dev *dev, int enable)
|
@@ -332,11 +334,11 @@ static void msix_set_enable(struct pci_d
|
||||||
pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSIX);
|
pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSIX);
|
||||||
if ( pos )
|
if ( pos )
|
||||||
{
|
{
|
||||||
@ -88,7 +90,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,9 +355,11 @@ static void msi_set_mask_bit(struct irq_desc *desc, int flag)
|
@@ -353,9 +355,11 @@ static void msi_set_mask_bit(struct irq_
|
||||||
|
|
||||||
ASSERT(spin_is_locked(&desc->lock));
|
ASSERT(spin_is_locked(&desc->lock));
|
||||||
BUG_ON(!entry || !entry->dev);
|
BUG_ON(!entry || !entry->dev);
|
||||||
@ -102,7 +104,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
u32 mask_bits;
|
u32 mask_bits;
|
||||||
u16 seg = entry->dev->seg;
|
u16 seg = entry->dev->seg;
|
||||||
u8 bus = entry->dev->bus;
|
u8 bus = entry->dev->bus;
|
||||||
@@ -701,13 +705,14 @@ static u64 read_pci_mem_bar(u16 seg, u8 bus, u8 slot, u8 func, u8 bir, int vf)
|
@@ -701,13 +705,14 @@ static u64 read_pci_mem_bar(u16 seg, u8
|
||||||
* requested MSI-X entries with allocated irqs or non-zero for otherwise.
|
* requested MSI-X entries with allocated irqs or non-zero for otherwise.
|
||||||
**/
|
**/
|
||||||
static int msix_capability_init(struct pci_dev *dev,
|
static int msix_capability_init(struct pci_dev *dev,
|
||||||
@ -118,7 +120,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
u16 control;
|
u16 control;
|
||||||
u64 table_paddr;
|
u64 table_paddr;
|
||||||
u32 table_offset;
|
u32 table_offset;
|
||||||
@@ -719,7 +724,6 @@ static int msix_capability_init(struct pci_dev *dev,
|
@@ -719,7 +724,6 @@ static int msix_capability_init(struct p
|
||||||
|
|
||||||
ASSERT(spin_is_locked(&pcidevs_lock));
|
ASSERT(spin_is_locked(&pcidevs_lock));
|
||||||
|
|
||||||
@ -126,7 +128,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
control = pci_conf_read16(seg, bus, slot, func, msix_control_reg(pos));
|
control = pci_conf_read16(seg, bus, slot, func, msix_control_reg(pos));
|
||||||
msix_set_enable(dev, 0);/* Ensure msix is disabled as I set it up */
|
msix_set_enable(dev, 0);/* Ensure msix is disabled as I set it up */
|
||||||
|
|
||||||
@@ -884,10 +888,9 @@ static int __pci_enable_msi(struct msi_info *msi, struct msi_desc **desc)
|
@@ -884,10 +888,9 @@ static int __pci_enable_msi(struct msi_i
|
||||||
old_desc = find_msi_entry(pdev, msi->irq, PCI_CAP_ID_MSI);
|
old_desc = find_msi_entry(pdev, msi->irq, PCI_CAP_ID_MSI);
|
||||||
if ( old_desc )
|
if ( old_desc )
|
||||||
{
|
{
|
||||||
@ -140,7 +142,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
*desc = old_desc;
|
*desc = old_desc;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -895,10 +898,10 @@ static int __pci_enable_msi(struct msi_info *msi, struct msi_desc **desc)
|
@@ -895,10 +898,10 @@ static int __pci_enable_msi(struct msi_i
|
||||||
old_desc = find_msi_entry(pdev, -1, PCI_CAP_ID_MSIX);
|
old_desc = find_msi_entry(pdev, -1, PCI_CAP_ID_MSIX);
|
||||||
if ( old_desc )
|
if ( old_desc )
|
||||||
{
|
{
|
||||||
@ -155,7 +157,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return msi_capability_init(pdev, msi->irq, desc, msi->entry_nr);
|
return msi_capability_init(pdev, msi->irq, desc, msi->entry_nr);
|
||||||
@@ -912,7 +915,6 @@ static void __pci_disable_msi(struct msi_desc *entry)
|
@@ -912,7 +915,6 @@ static void __pci_disable_msi(struct msi
|
||||||
msi_set_enable(dev, 0);
|
msi_set_enable(dev, 0);
|
||||||
|
|
||||||
BUG_ON(list_empty(&dev->msi_list));
|
BUG_ON(list_empty(&dev->msi_list));
|
||||||
@ -163,7 +165,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -932,7 +934,7 @@ static void __pci_disable_msi(struct msi_desc *entry)
|
@@ -932,7 +934,7 @@ static void __pci_disable_msi(struct msi
|
||||||
**/
|
**/
|
||||||
static int __pci_enable_msix(struct msi_info *msi, struct msi_desc **desc)
|
static int __pci_enable_msix(struct msi_info *msi, struct msi_desc **desc)
|
||||||
{
|
{
|
||||||
@ -172,7 +174,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
u16 control;
|
u16 control;
|
||||||
u8 slot = PCI_SLOT(msi->devfn);
|
u8 slot = PCI_SLOT(msi->devfn);
|
||||||
@@ -941,23 +943,22 @@ static int __pci_enable_msix(struct msi_info *msi, struct msi_desc **desc)
|
@@ -941,23 +943,22 @@ static int __pci_enable_msix(struct msi_
|
||||||
|
|
||||||
ASSERT(spin_is_locked(&pcidevs_lock));
|
ASSERT(spin_is_locked(&pcidevs_lock));
|
||||||
pdev = pci_get_pdev(msi->seg, msi->bus, msi->devfn);
|
pdev = pci_get_pdev(msi->seg, msi->bus, msi->devfn);
|
||||||
@ -202,7 +204,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
*desc = old_desc;
|
*desc = old_desc;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -965,15 +966,13 @@ static int __pci_enable_msix(struct msi_info *msi, struct msi_desc **desc)
|
@@ -965,15 +966,13 @@ static int __pci_enable_msix(struct msi_
|
||||||
old_desc = find_msi_entry(pdev, -1, PCI_CAP_ID_MSI);
|
old_desc = find_msi_entry(pdev, -1, PCI_CAP_ID_MSI);
|
||||||
if ( old_desc )
|
if ( old_desc )
|
||||||
{
|
{
|
||||||
@ -223,7 +225,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void _pci_cleanup_msix(struct arch_msix *msix)
|
static void _pci_cleanup_msix(struct arch_msix *msix)
|
||||||
@@ -991,19 +990,16 @@ static void _pci_cleanup_msix(struct arch_msix *msix)
|
@@ -991,19 +990,16 @@ static void _pci_cleanup_msix(struct arc
|
||||||
|
|
||||||
static void __pci_disable_msix(struct msi_desc *entry)
|
static void __pci_disable_msix(struct msi_desc *entry)
|
||||||
{
|
{
|
||||||
@ -252,7 +254,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
msix_set_enable(dev, 0);
|
msix_set_enable(dev, 0);
|
||||||
|
|
||||||
BUG_ON(list_empty(&dev->msi_list));
|
BUG_ON(list_empty(&dev->msi_list));
|
||||||
@@ -1045,7 +1041,7 @@ int pci_prepare_msix(u16 seg, u8 bus, u8 devfn, bool_t off)
|
@@ -1045,7 +1041,7 @@ int pci_prepare_msix(u16 seg, u8 bus, u8
|
||||||
u16 control = pci_conf_read16(seg, bus, slot, func,
|
u16 control = pci_conf_read16(seg, bus, slot, func,
|
||||||
msix_control_reg(pos));
|
msix_control_reg(pos));
|
||||||
|
|
||||||
@ -261,7 +263,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
multi_msix_capable(control));
|
multi_msix_capable(control));
|
||||||
}
|
}
|
||||||
spin_unlock(&pcidevs_lock);
|
spin_unlock(&pcidevs_lock);
|
||||||
@@ -1064,8 +1060,8 @@ int pci_enable_msi(struct msi_info *msi, struct msi_desc **desc)
|
@@ -1064,8 +1060,8 @@ int pci_enable_msi(struct msi_info *msi,
|
||||||
if ( !use_msi )
|
if ( !use_msi )
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
@ -272,7 +274,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1115,7 +1111,9 @@ int pci_restore_msi_state(struct pci_dev *pdev)
|
@@ -1115,7 +1111,9 @@ int pci_restore_msi_state(struct pci_dev
|
||||||
if ( !pdev )
|
if ( !pdev )
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
# Commit ad28e42bd1d28d746988ed71654e8aa670629753
|
# Commit ad28e42bd1d28d746988ed71654e8aa670629753
|
||||||
# Date 2015-06-19 10:59:53 +0200
|
# Date 2015-06-19 10:59:53 +0200
|
||||||
# Author Jan Beulich <jbeulich@suse.com>
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
@ -11,8 +13,28 @@ host and guest requested so.
|
|||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/hpet.c 2015-01-14 18:44:18.000000000 +0100
|
# Commit 84d6add5593d865736831d150da7c38588f669f6
|
||||||
+++ sle12sp1/xen/arch/x86/hpet.c 2015-07-08 00:00:00.000000000 +0200
|
# Date 2015-07-10 12:36:24 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
x86/MSI: fix guest unmasking when handling IRQ via event channel
|
||||||
|
|
||||||
|
Rather than assuming only PV guests need special treatment (and
|
||||||
|
dealing with that directly when an IRQ gets set up), keep all guest MSI
|
||||||
|
IRQs masked until either the (HVM) guest unmasks them via vMSI or the
|
||||||
|
(PV, PVHVM, or PVH) guest sets up an event channel for it.
|
||||||
|
|
||||||
|
To not further clutter the common evtchn_bind_pirq() with x86-specific
|
||||||
|
code, introduce an arch_evtchn_bind_pirq() hook instead.
|
||||||
|
|
||||||
|
Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
|
||||||
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
Tested-by: Sander Eikelenboom <linux@eikelenboom.it>
|
||||||
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/hpet.c
|
||||||
|
+++ b/xen/arch/x86/hpet.c
|
||||||
@@ -240,7 +240,7 @@ static void hpet_msi_unmask(struct irq_d
|
@@ -240,7 +240,7 @@ static void hpet_msi_unmask(struct irq_d
|
||||||
cfg = hpet_read32(HPET_Tn_CFG(ch->idx));
|
cfg = hpet_read32(HPET_Tn_CFG(ch->idx));
|
||||||
cfg |= HPET_TN_ENABLE;
|
cfg |= HPET_TN_ENABLE;
|
||||||
@ -31,8 +53,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int hpet_msi_write(struct hpet_event_channel *ch, struct msi_msg *msg)
|
static int hpet_msi_write(struct hpet_event_channel *ch, struct msi_msg *msg)
|
||||||
--- sle12sp1.orig/xen/arch/x86/hvm/vmsi.c 2015-07-08 00:00:00.000000000 +0200
|
--- a/xen/arch/x86/hvm/vmsi.c
|
||||||
+++ sle12sp1/xen/arch/x86/hvm/vmsi.c 2015-07-08 00:00:00.000000000 +0200
|
+++ b/xen/arch/x86/hvm/vmsi.c
|
||||||
@@ -219,7 +219,6 @@ static int msixtbl_read(
|
@@ -219,7 +219,6 @@ static int msixtbl_read(
|
||||||
{
|
{
|
||||||
unsigned long offset;
|
unsigned long offset;
|
||||||
@ -113,8 +135,36 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
spin_unlock_irqrestore(&desc->lock, flags);
|
spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-07-08 00:00:00.000000000 +0200
|
--- a/xen/arch/x86/irq.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-07-08 00:00:00.000000000 +0200
|
+++ b/xen/arch/x86/irq.c
|
||||||
|
@@ -2502,6 +2502,25 @@ int unmap_domain_pirq_emuirq(struct doma
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void arch_evtchn_bind_pirq(struct domain *d, int pirq)
|
||||||
|
+{
|
||||||
|
+ int irq = domain_pirq_to_irq(d, pirq);
|
||||||
|
+ struct irq_desc *desc;
|
||||||
|
+ unsigned long flags;
|
||||||
|
+
|
||||||
|
+ if ( irq <= 0 )
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if ( is_hvm_domain(d) )
|
||||||
|
+ map_domain_emuirq_pirq(d, pirq, IRQ_PT);
|
||||||
|
+
|
||||||
|
+ desc = irq_to_desc(irq);
|
||||||
|
+ spin_lock_irqsave(&desc->lock, flags);
|
||||||
|
+ if ( desc->msi_desc )
|
||||||
|
+ guest_mask_msi_irq(desc, 0);
|
||||||
|
+ spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
bool_t hvm_domain_use_pirq(const struct domain *d, const struct pirq *pirq)
|
||||||
|
{
|
||||||
|
return is_hvm_domain(d) && pirq &&
|
||||||
|
--- a/xen/arch/x86/msi.c
|
||||||
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -349,9 +349,10 @@ int msi_maskable_irq(const struct msi_de
|
@@ -349,9 +349,10 @@ int msi_maskable_irq(const struct msi_de
|
||||||
|| entry->msi_attrib.maskbit;
|
|| entry->msi_attrib.maskbit;
|
||||||
}
|
}
|
||||||
@ -137,7 +187,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int msi_get_mask_bit(const struct msi_desc *entry)
|
static int msi_get_mask_bit(const struct msi_desc *entry)
|
||||||
@@ -405,20 +407,33 @@ static int msi_get_mask_bit(const struct
|
@@ -405,20 +407,30 @@ static int msi_get_mask_bit(const struct
|
||||||
|
|
||||||
void mask_msi_irq(struct irq_desc *desc)
|
void mask_msi_irq(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
@ -159,10 +209,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
static unsigned int startup_msi_irq(struct irq_desc *desc)
|
static unsigned int startup_msi_irq(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
- unmask_msi_irq(desc);
|
- unmask_msi_irq(desc);
|
||||||
+ bool_t guest_masked = (desc->status & IRQ_GUEST) &&
|
+ msi_set_mask_bit(desc, 0, !!(desc->status & IRQ_GUEST));
|
||||||
+ is_hvm_domain(desc->msi_desc->dev->domain);
|
|
||||||
+
|
|
||||||
+ msi_set_mask_bit(desc, 0, guest_masked);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +221,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
void ack_nonmaskable_msi_irq(struct irq_desc *desc)
|
void ack_nonmaskable_msi_irq(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
irq_complete_move(desc);
|
irq_complete_move(desc);
|
||||||
@@ -443,7 +458,7 @@ void end_nonmaskable_msi_irq(struct irq_
|
@@ -443,7 +455,7 @@ void end_nonmaskable_msi_irq(struct irq_
|
||||||
static hw_irq_controller pci_msi_maskable = {
|
static hw_irq_controller pci_msi_maskable = {
|
||||||
.typename = "PCI-MSI/-X",
|
.typename = "PCI-MSI/-X",
|
||||||
.startup = startup_msi_irq,
|
.startup = startup_msi_irq,
|
||||||
@ -183,7 +230,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
.enable = unmask_msi_irq,
|
.enable = unmask_msi_irq,
|
||||||
.disable = mask_msi_irq,
|
.disable = mask_msi_irq,
|
||||||
.ack = ack_maskable_msi_irq,
|
.ack = ack_maskable_msi_irq,
|
||||||
@@ -591,7 +606,8 @@ static int msi_capability_init(struct pc
|
@@ -591,7 +603,8 @@ static int msi_capability_init(struct pc
|
||||||
entry[i].msi_attrib.is_64 = is_64bit_address(control);
|
entry[i].msi_attrib.is_64 = is_64bit_address(control);
|
||||||
entry[i].msi_attrib.entry_nr = i;
|
entry[i].msi_attrib.entry_nr = i;
|
||||||
entry[i].msi_attrib.maskbit = is_mask_bit_support(control);
|
entry[i].msi_attrib.maskbit = is_mask_bit_support(control);
|
||||||
@ -193,7 +240,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
entry[i].msi_attrib.pos = pos;
|
entry[i].msi_attrib.pos = pos;
|
||||||
if ( entry[i].msi_attrib.maskbit )
|
if ( entry[i].msi_attrib.maskbit )
|
||||||
entry[i].msi.mpos = mpos;
|
entry[i].msi.mpos = mpos;
|
||||||
@@ -817,7 +833,8 @@ static int msix_capability_init(struct p
|
@@ -817,7 +830,8 @@ static int msix_capability_init(struct p
|
||||||
entry->msi_attrib.is_64 = 1;
|
entry->msi_attrib.is_64 = 1;
|
||||||
entry->msi_attrib.entry_nr = msi->entry_nr;
|
entry->msi_attrib.entry_nr = msi->entry_nr;
|
||||||
entry->msi_attrib.maskbit = 1;
|
entry->msi_attrib.maskbit = 1;
|
||||||
@ -203,7 +250,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
entry->msi_attrib.pos = pos;
|
entry->msi_attrib.pos = pos;
|
||||||
entry->irq = msi->irq;
|
entry->irq = msi->irq;
|
||||||
entry->dev = dev;
|
entry->dev = dev;
|
||||||
@@ -1152,7 +1169,8 @@ int pci_restore_msi_state(struct pci_dev
|
@@ -1152,7 +1166,8 @@ int pci_restore_msi_state(struct pci_dev
|
||||||
|
|
||||||
for ( i = 0; ; )
|
for ( i = 0; ; )
|
||||||
{
|
{
|
||||||
@ -213,7 +260,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
if ( !--nr )
|
if ( !--nr )
|
||||||
break;
|
break;
|
||||||
@@ -1304,7 +1322,7 @@ static void dump_msi(unsigned char key)
|
@@ -1304,7 +1319,7 @@ static void dump_msi(unsigned char key)
|
||||||
else
|
else
|
||||||
mask = '?';
|
mask = '?';
|
||||||
printk(" %-6s%4u vec=%02x%7s%6s%3sassert%5s%7s"
|
printk(" %-6s%4u vec=%02x%7s%6s%3sassert%5s%7s"
|
||||||
@ -222,7 +269,7 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
type, irq,
|
type, irq,
|
||||||
(data & MSI_DATA_VECTOR_MASK) >> MSI_DATA_VECTOR_SHIFT,
|
(data & MSI_DATA_VECTOR_MASK) >> MSI_DATA_VECTOR_SHIFT,
|
||||||
data & MSI_DATA_DELIVERY_LOWPRI ? "lowest" : "fixed",
|
data & MSI_DATA_DELIVERY_LOWPRI ? "lowest" : "fixed",
|
||||||
@@ -1312,7 +1330,10 @@ static void dump_msi(unsigned char key)
|
@@ -1312,7 +1327,10 @@ static void dump_msi(unsigned char key)
|
||||||
data & MSI_DATA_LEVEL_ASSERT ? "" : "de",
|
data & MSI_DATA_LEVEL_ASSERT ? "" : "de",
|
||||||
addr & MSI_ADDR_DESTMODE_LOGIC ? "log" : "phys",
|
addr & MSI_ADDR_DESTMODE_LOGIC ? "log" : "phys",
|
||||||
addr & MSI_ADDR_REDIRECTION_LOWPRI ? "lowest" : "cpu",
|
addr & MSI_ADDR_REDIRECTION_LOWPRI ? "lowest" : "cpu",
|
||||||
@ -234,8 +281,22 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/drivers/passthrough/amd/iommu_init.c 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/drivers/passthrough/amd/iommu_init.c 2015-07-08 00:00:00.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
|
@@ -445,10 +445,7 @@ static long evtchn_bind_pirq(evtchn_bind
|
||||||
|
|
||||||
|
bind->port = port;
|
||||||
|
|
||||||
|
-#ifdef CONFIG_X86
|
||||||
|
- if ( is_hvm_domain(d) && domain_pirq_to_irq(d, pirq) > 0 )
|
||||||
|
- map_domain_emuirq_pirq(d, pirq, IRQ_PT);
|
||||||
|
-#endif
|
||||||
|
+ arch_evtchn_bind_pirq(d, pirq);
|
||||||
|
|
||||||
|
out:
|
||||||
|
spin_unlock(&d->event_lock);
|
||||||
|
--- a/xen/drivers/passthrough/amd/iommu_init.c
|
||||||
|
+++ b/xen/drivers/passthrough/amd/iommu_init.c
|
||||||
@@ -451,7 +451,7 @@ static void iommu_msi_unmask(struct irq_
|
@@ -451,7 +451,7 @@ static void iommu_msi_unmask(struct irq_
|
||||||
spin_lock_irqsave(&iommu->lock, flags);
|
spin_lock_irqsave(&iommu->lock, flags);
|
||||||
amd_iommu_msi_enable(iommu, IOMMU_CONTROL_ENABLED);
|
amd_iommu_msi_enable(iommu, IOMMU_CONTROL_ENABLED);
|
||||||
@ -254,8 +315,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int iommu_msi_startup(struct irq_desc *desc)
|
static unsigned int iommu_msi_startup(struct irq_desc *desc)
|
||||||
--- sle12sp1.orig/xen/drivers/passthrough/vtd/iommu.c 2015-05-19 23:16:48.000000000 +0200
|
--- a/xen/drivers/passthrough/vtd/iommu.c
|
||||||
+++ sle12sp1/xen/drivers/passthrough/vtd/iommu.c 2015-07-08 00:00:00.000000000 +0200
|
+++ b/xen/drivers/passthrough/vtd/iommu.c
|
||||||
@@ -996,7 +996,7 @@ static void dma_msi_unmask(struct irq_de
|
@@ -996,7 +996,7 @@ static void dma_msi_unmask(struct irq_de
|
||||||
spin_lock_irqsave(&iommu->register_lock, flags);
|
spin_lock_irqsave(&iommu->register_lock, flags);
|
||||||
dmar_writel(iommu->reg, DMAR_FECTL_REG, 0);
|
dmar_writel(iommu->reg, DMAR_FECTL_REG, 0);
|
||||||
@ -274,8 +335,19 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int dma_msi_startup(struct irq_desc *desc)
|
static unsigned int dma_msi_startup(struct irq_desc *desc)
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/msi.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/asm-arm/irq.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/msi.h 2015-07-08 00:00:00.000000000 +0200
|
+++ b/xen/include/asm-arm/irq.h
|
||||||
|
@@ -44,6 +44,8 @@ int route_irq_to_guest(struct domain *d,
|
||||||
|
const char *devname);
|
||||||
|
void arch_move_irqs(struct vcpu *v);
|
||||||
|
|
||||||
|
+#define arch_evtchn_bind_pirq(d, pirq) ((void)((d) + (pirq)))
|
||||||
|
+
|
||||||
|
/* Set IRQ type for an SPI */
|
||||||
|
int irq_set_spi_type(unsigned int spi, unsigned int type);
|
||||||
|
|
||||||
|
--- a/xen/include/asm-x86/msi.h
|
||||||
|
+++ b/xen/include/asm-x86/msi.h
|
||||||
@@ -90,12 +90,13 @@ extern unsigned int pci_msix_get_table_l
|
@@ -90,12 +90,13 @@ extern unsigned int pci_msix_get_table_l
|
||||||
|
|
||||||
struct msi_desc {
|
struct msi_desc {
|
||||||
@ -303,3 +375,14 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
void ack_nonmaskable_msi_irq(struct irq_desc *);
|
void ack_nonmaskable_msi_irq(struct irq_desc *);
|
||||||
void end_nonmaskable_msi_irq(struct irq_desc *, u8 vector);
|
void end_nonmaskable_msi_irq(struct irq_desc *, u8 vector);
|
||||||
void set_msi_affinity(struct irq_desc *, const cpumask_t *);
|
void set_msi_affinity(struct irq_desc *, const cpumask_t *);
|
||||||
|
--- a/xen/include/xen/irq.h
|
||||||
|
+++ b/xen/include/xen/irq.h
|
||||||
|
@@ -172,4 +172,8 @@ unsigned int set_desc_affinity(struct ir
|
||||||
|
unsigned int arch_hwdom_irqs(domid_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef arch_evtchn_bind_pirq
|
||||||
|
+void arch_evtchn_bind_pirq(struct domain *, int pirq);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#endif /* __XEN_IRQ_H__ */
|
||||||
|
@ -25,8 +25,8 @@ Signed-off-by: Malcolm Crossley <malcolm.crossley@citrix.com>
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/domain.c 2015-07-08 00:00:00.000000000 +0200
|
--- a/xen/common/domain.c
|
||||||
+++ sle12sp1/xen/common/domain.c 2015-07-08 13:52:23.000000000 +0200
|
+++ b/xen/common/domain.c
|
||||||
@@ -126,6 +126,8 @@ struct vcpu *alloc_vcpu(
|
@@ -126,6 +126,8 @@ struct vcpu *alloc_vcpu(
|
||||||
|
|
||||||
tasklet_init(&v->continue_hypercall_tasklet, NULL, 0);
|
tasklet_init(&v->continue_hypercall_tasklet, NULL, 0);
|
||||||
@ -36,8 +36,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
if ( !zalloc_cpumask_var(&v->cpu_hard_affinity) ||
|
if ( !zalloc_cpumask_var(&v->cpu_hard_affinity) ||
|
||||||
!zalloc_cpumask_var(&v->cpu_hard_affinity_tmp) ||
|
!zalloc_cpumask_var(&v->cpu_hard_affinity_tmp) ||
|
||||||
!zalloc_cpumask_var(&v->cpu_hard_affinity_saved) ||
|
!zalloc_cpumask_var(&v->cpu_hard_affinity_saved) ||
|
||||||
--- sle12sp1.orig/xen/common/grant_table.c 2015-07-08 13:49:47.000000000 +0200
|
--- a/xen/common/grant_table.c
|
||||||
+++ sle12sp1/xen/common/grant_table.c 2015-07-08 13:52:23.000000000 +0200
|
+++ b/xen/common/grant_table.c
|
||||||
@@ -37,6 +37,7 @@
|
@@ -37,6 +37,7 @@
|
||||||
#include <xen/iommu.h>
|
#include <xen/iommu.h>
|
||||||
#include <xen/paging.h>
|
#include <xen/paging.h>
|
||||||
@ -239,8 +239,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
static void gnttab_usage_print(struct domain *rd)
|
static void gnttab_usage_print(struct domain *rd)
|
||||||
{
|
{
|
||||||
int first = 1;
|
int first = 1;
|
||||||
--- sle12sp1.orig/xen/include/xen/grant_table.h 2015-07-08 13:49:47.000000000 +0200
|
--- a/xen/include/xen/grant_table.h
|
||||||
+++ sle12sp1/xen/include/xen/grant_table.h 2015-07-08 13:52:23.000000000 +0200
|
+++ b/xen/include/xen/grant_table.h
|
||||||
@@ -60,6 +60,8 @@ struct grant_mapping {
|
@@ -60,6 +60,8 @@ struct grant_mapping {
|
||||||
u32 ref; /* grant ref */
|
u32 ref; /* grant ref */
|
||||||
u16 flags; /* 0-4: GNTMAP_* ; 5-15: unused */
|
u16 flags; /* 0-4: GNTMAP_* ; 5-15: unused */
|
||||||
@ -269,8 +269,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
/* Domain death release of granted mappings of other domains' memory. */
|
/* Domain death release of granted mappings of other domains' memory. */
|
||||||
void
|
void
|
||||||
--- sle12sp1.orig/xen/include/xen/sched.h 2015-01-14 18:44:18.000000000 +0100
|
--- a/xen/include/xen/sched.h
|
||||||
+++ sle12sp1/xen/include/xen/sched.h 2015-07-08 13:52:23.000000000 +0200
|
+++ b/xen/include/xen/sched.h
|
||||||
@@ -219,6 +219,10 @@ struct vcpu
|
@@ -219,6 +219,10 @@ struct vcpu
|
||||||
/* VCPU paused by system controller. */
|
/* VCPU paused by system controller. */
|
||||||
int controller_pause_count;
|
int controller_pause_count;
|
||||||
|
@ -22,8 +22,8 @@ transfer the stolen entries to the thief VCPU (aiming for (b)).
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/grant_table.c 2015-07-08 13:52:23.000000000 +0200
|
--- a/xen/common/grant_table.c
|
||||||
+++ sle12sp1/xen/common/grant_table.c 2015-07-08 13:52:31.000000000 +0200
|
+++ b/xen/common/grant_table.c
|
||||||
@@ -283,26 +283,70 @@ __get_maptrack_handle(
|
@@ -283,26 +283,70 @@ __get_maptrack_handle(
|
||||||
struct grant_table *t,
|
struct grant_table *t,
|
||||||
struct vcpu *v)
|
struct vcpu *v)
|
||||||
|
@ -19,8 +19,8 @@ to void.
|
|||||||
|
|
||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 13:54:42.000000000 +0200
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-08 13:57:44.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
@@ -204,6 +204,7 @@ static void free_evtchn(struct domain *d
|
@@ -204,6 +204,7 @@ static void free_evtchn(struct domain *d
|
||||||
/* Reset binding to vcpu0 when the channel is freed. */
|
/* Reset binding to vcpu0 when the channel is freed. */
|
||||||
chn->state = ECS_FREE;
|
chn->state = ECS_FREE;
|
||||||
@ -29,7 +29,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
xsm_evtchn_close_post(chn);
|
xsm_evtchn_close_post(chn);
|
||||||
}
|
}
|
||||||
@@ -470,7 +471,7 @@ static long evtchn_bind_pirq(evtchn_bind
|
@@ -467,7 +468,7 @@ static long evtchn_bind_pirq(evtchn_bind
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
{
|
{
|
||||||
struct domain *d2 = NULL;
|
struct domain *d2 = NULL;
|
||||||
struct vcpu *v;
|
struct vcpu *v;
|
||||||
@@ -490,7 +491,7 @@ static long __evtchn_close(struct domain
|
@@ -487,7 +488,7 @@ static long __evtchn_close(struct domain
|
||||||
chn1 = evtchn_from_port(d1, port1);
|
chn1 = evtchn_from_port(d1, port1);
|
||||||
|
|
||||||
/* Guest cannot close a Xen-attached event channel. */
|
/* Guest cannot close a Xen-attached event channel. */
|
||||||
@ -47,7 +47,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
{
|
{
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
@@ -599,12 +600,6 @@ static long __evtchn_close(struct domain
|
@@ -596,12 +597,6 @@ static long __evtchn_close(struct domain
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
int evtchn_send(struct domain *d, unsigned int lport)
|
int evtchn_send(struct domain *d, unsigned int lport)
|
||||||
{
|
{
|
||||||
struct evtchn *lchn, *rchn;
|
struct evtchn *lchn, *rchn;
|
||||||
@@ -959,7 +954,7 @@ static long evtchn_reset(evtchn_reset_t
|
@@ -956,7 +951,7 @@ static long evtchn_reset(evtchn_reset_t
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for ( i = 0; port_is_valid(d, i); i++ )
|
for ( i = 0; port_is_valid(d, i); i++ )
|
||||||
@ -69,7 +69,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
spin_lock(&d->event_lock);
|
spin_lock(&d->event_lock);
|
||||||
|
|
||||||
@@ -1066,7 +1061,7 @@ long do_event_channel_op(int cmd, XEN_GU
|
@@ -1063,7 +1058,7 @@ long do_event_channel_op(int cmd, XEN_GU
|
||||||
struct evtchn_close close;
|
struct evtchn_close close;
|
||||||
if ( copy_from_guest(&close, arg, 1) != 0 )
|
if ( copy_from_guest(&close, arg, 1) != 0 )
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1196,11 +1191,10 @@ void free_xen_event_channel(
|
@@ -1193,11 +1188,10 @@ void free_xen_event_channel(
|
||||||
BUG_ON(!port_is_valid(d, port));
|
BUG_ON(!port_is_valid(d, port));
|
||||||
chn = evtchn_from_port(d, port);
|
chn = evtchn_from_port(d, port);
|
||||||
BUG_ON(!consumer_is_xen(chn));
|
BUG_ON(!consumer_is_xen(chn));
|
||||||
@ -91,7 +91,7 @@ Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1299,10 +1293,7 @@ void evtchn_destroy(struct domain *d)
|
@@ -1296,10 +1290,7 @@ void evtchn_destroy(struct domain *d)
|
||||||
|
|
||||||
/* Close all existing event channels. */
|
/* Close all existing event channels. */
|
||||||
for ( i = 0; port_is_valid(d, i); i++ )
|
for ( i = 0; port_is_valid(d, i); i++ )
|
||||||
|
@ -14,9 +14,9 @@ state being present and valid.
|
|||||||
|
|
||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 13:57:44.000000000 +0200
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-08 14:00:53.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
@@ -1177,22 +1177,8 @@ int alloc_unbound_xen_event_channel(
|
@@ -1174,22 +1174,8 @@ int alloc_unbound_xen_event_channel(
|
||||||
void free_xen_event_channel(
|
void free_xen_event_channel(
|
||||||
struct vcpu *local_vcpu, int port)
|
struct vcpu *local_vcpu, int port)
|
||||||
{
|
{
|
||||||
@ -39,7 +39,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
|
|
||||||
evtchn_close(d, port, 0);
|
evtchn_close(d, port, 0);
|
||||||
}
|
}
|
||||||
@@ -1206,18 +1192,12 @@ void notify_via_xen_event_channel(struct
|
@@ -1203,18 +1189,12 @@ void notify_via_xen_event_channel(struct
|
||||||
|
|
||||||
spin_lock(&ld->event_lock);
|
spin_lock(&ld->event_lock);
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
rd = lchn->u.interdomain.remote_dom;
|
rd = lchn->u.interdomain.remote_dom;
|
||||||
rport = lchn->u.interdomain.remote_port;
|
rport = lchn->u.interdomain.remote_port;
|
||||||
rchn = evtchn_from_port(rd, rport);
|
rchn = evtchn_from_port(rd, rport);
|
||||||
@@ -1285,7 +1265,7 @@ int evtchn_init(struct domain *d)
|
@@ -1282,7 +1262,7 @@ int evtchn_init(struct domain *d)
|
||||||
|
|
||||||
void evtchn_destroy(struct domain *d)
|
void evtchn_destroy(struct domain *d)
|
||||||
{
|
{
|
||||||
@ -68,7 +68,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
|
|
||||||
/* After this barrier no new event-channel allocations can occur. */
|
/* After this barrier no new event-channel allocations can occur. */
|
||||||
BUG_ON(!d->is_dying);
|
BUG_ON(!d->is_dying);
|
||||||
@@ -1295,8 +1275,17 @@ void evtchn_destroy(struct domain *d)
|
@@ -1292,8 +1272,17 @@ void evtchn_destroy(struct domain *d)
|
||||||
for ( i = 0; port_is_valid(d, i); i++ )
|
for ( i = 0; port_is_valid(d, i); i++ )
|
||||||
evtchn_close(d, i, 0);
|
evtchn_close(d, i, 0);
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
|||||||
for ( i = 0; i < NR_EVTCHN_GROUPS; i++ )
|
for ( i = 0; i < NR_EVTCHN_GROUPS; i++ )
|
||||||
{
|
{
|
||||||
if ( !d->evtchn_group[i] )
|
if ( !d->evtchn_group[i] )
|
||||||
@@ -1304,20 +1293,9 @@ void evtchn_destroy(struct domain *d)
|
@@ -1301,20 +1290,9 @@ void evtchn_destroy(struct domain *d)
|
||||||
for ( j = 0; j < BUCKETS_PER_GROUP; j++ )
|
for ( j = 0; j < BUCKETS_PER_GROUP; j++ )
|
||||||
free_evtchn_bucket(d, d->evtchn_group[i][j]);
|
free_evtchn_bucket(d, d->evtchn_group[i][j]);
|
||||||
xfree(d->evtchn_group[i]);
|
xfree(d->evtchn_group[i]);
|
||||||
|
@ -22,8 +22,8 @@ the number that fit into a single page to 64 (instead of 128).
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 14:00:53.000000000 +0200
|
--- a/xen/common/event_channel.c
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-08 14:04:08.000000000 +0200
|
+++ b/xen/common/event_channel.c
|
||||||
@@ -141,6 +141,7 @@ static struct evtchn *alloc_evtchn_bucke
|
@@ -141,6 +141,7 @@ static struct evtchn *alloc_evtchn_bucke
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -143,8 +143,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
+
|
+
|
||||||
bind->port = port;
|
bind->port = port;
|
||||||
|
|
||||||
#ifdef CONFIG_X86
|
arch_evtchn_bind_pirq(d, pirq);
|
||||||
@@ -577,15 +622,24 @@ static long evtchn_close(struct domain *
|
@@ -574,15 +619,24 @@ static long evtchn_close(struct domain *
|
||||||
BUG_ON(chn2->state != ECS_INTERDOMAIN);
|
BUG_ON(chn2->state != ECS_INTERDOMAIN);
|
||||||
BUG_ON(chn2->u.interdomain.remote_dom != d1);
|
BUG_ON(chn2->u.interdomain.remote_dom != d1);
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
if ( d2 != NULL )
|
if ( d2 != NULL )
|
||||||
@@ -607,21 +661,18 @@ int evtchn_send(struct domain *d, unsign
|
@@ -604,21 +658,18 @@ int evtchn_send(struct domain *d, unsign
|
||||||
struct vcpu *rvcpu;
|
struct vcpu *rvcpu;
|
||||||
int rport, ret = 0;
|
int rport, ret = 0;
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = xsm_evtchn_send(XSM_HOOK, ld, lchn);
|
ret = xsm_evtchn_send(XSM_HOOK, ld, lchn);
|
||||||
@@ -651,7 +702,7 @@ int evtchn_send(struct domain *d, unsign
|
@@ -648,7 +699,7 @@ int evtchn_send(struct domain *d, unsign
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -206,7 +206,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1162,11 +1213,15 @@ int alloc_unbound_xen_event_channel(
|
@@ -1159,11 +1210,15 @@ int alloc_unbound_xen_event_channel(
|
||||||
if ( rc )
|
if ( rc )
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
out:
|
out:
|
||||||
spin_unlock(&d->event_lock);
|
spin_unlock(&d->event_lock);
|
||||||
|
|
||||||
@@ -1190,11 +1245,11 @@ void notify_via_xen_event_channel(struct
|
@@ -1187,11 +1242,11 @@ void notify_via_xen_event_channel(struct
|
||||||
struct domain *rd;
|
struct domain *rd;
|
||||||
int rport;
|
int rport;
|
||||||
|
|
||||||
@ -236,7 +236,7 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
if ( likely(lchn->state == ECS_INTERDOMAIN) )
|
if ( likely(lchn->state == ECS_INTERDOMAIN) )
|
||||||
{
|
{
|
||||||
ASSERT(consumer_is_xen(lchn));
|
ASSERT(consumer_is_xen(lchn));
|
||||||
@@ -1204,7 +1259,7 @@ void notify_via_xen_event_channel(struct
|
@@ -1201,7 +1256,7 @@ void notify_via_xen_event_channel(struct
|
||||||
evtchn_set_pending(rd->vcpu[rchn->notify_vcpu_id], rport);
|
evtchn_set_pending(rd->vcpu[rchn->notify_vcpu_id], rport);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,8 +245,8 @@ Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
void evtchn_check_pollers(struct domain *d, unsigned int port)
|
void evtchn_check_pollers(struct domain *d, unsigned int port)
|
||||||
--- sle12sp1.orig/xen/include/xen/sched.h 2015-07-08 13:53:50.000000000 +0200
|
--- a/xen/include/xen/sched.h
|
||||||
+++ sle12sp1/xen/include/xen/sched.h 2015-07-08 14:04:08.000000000 +0200
|
+++ b/xen/include/xen/sched.h
|
||||||
@@ -79,6 +79,7 @@ extern domid_t hardware_domid;
|
@@ -79,6 +79,7 @@ extern domid_t hardware_domid;
|
||||||
|
|
||||||
struct evtchn
|
struct evtchn
|
||||||
|
@ -14,8 +14,8 @@ This does not decrease the number of struct evtchn's per-page.
|
|||||||
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
|
||||||
Acked-by: Jan Beulich <jbeulich@suse.com>
|
Acked-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/xen/sched.h 2015-07-08 14:04:08.000000000 +0200
|
--- a/xen/include/xen/sched.h
|
||||||
+++ sle12sp1/xen/include/xen/sched.h 2015-07-08 14:04:21.000000000 +0200
|
+++ b/xen/include/xen/sched.h
|
||||||
@@ -129,7 +129,7 @@ struct evtchn
|
@@ -129,7 +129,7 @@ struct evtchn
|
||||||
#endif
|
#endif
|
||||||
} ssid;
|
} ssid;
|
||||||
|
@ -12,7 +12,7 @@ Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
|
|
||||||
--- a/xen/arch/x86/x86_64/traps.c
|
--- a/xen/arch/x86/x86_64/traps.c
|
||||||
+++ b/xen/arch/x86/x86_64/traps.c
|
+++ b/xen/arch/x86/x86_64/traps.c
|
||||||
@@ -84,7 +84,7 @@ void show_registers(const struct cpu_use
|
@@ -86,7 +86,7 @@ void show_registers(const struct cpu_use
|
||||||
struct cpu_user_regs fault_regs = *regs;
|
struct cpu_user_regs fault_regs = *regs;
|
||||||
unsigned long fault_crs[8];
|
unsigned long fault_crs[8];
|
||||||
enum context context;
|
enum context context;
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
# Commit 8022b05284dea80e24813d03180788ec7277a0bd
|
||||||
|
# Date 2015-07-07 14:29:39 +0200
|
||||||
|
# Author Dario Faggioli <dario.faggioli@citrix.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
x86 / cpupool: clear the proper cpu_valid bit on pCPU teardown
|
||||||
|
|
||||||
|
In fact, when a pCPU goes down, we want to clear its
|
||||||
|
bit in the correct cpupool's valid mask, rather than
|
||||||
|
always in cpupool0's one.
|
||||||
|
|
||||||
|
Before this commit, all the pCPUs in the non-default
|
||||||
|
pool(s) will be considered immediately valid, during
|
||||||
|
system resume, even the one that have not been brought
|
||||||
|
up yet. As a result, the (Credit1) scheduler will attempt
|
||||||
|
to run its load balancing logic on them, causing the
|
||||||
|
following Oops:
|
||||||
|
|
||||||
|
# xl cpupool-cpu-remove Pool-0 8-15
|
||||||
|
# xl cpupool-create name=\"Pool-1\"
|
||||||
|
# xl cpupool-cpu-add Pool-1 8-15
|
||||||
|
--> suspend
|
||||||
|
--> resume
|
||||||
|
(XEN) ----[ Xen-4.6-unstable x86_64 debug=y Tainted: C ]----
|
||||||
|
(XEN) CPU: 8
|
||||||
|
(XEN) RIP: e008:[<ffff82d080123078>] csched_schedule+0x4be/0xb97
|
||||||
|
(XEN) RFLAGS: 0000000000010087 CONTEXT: hypervisor
|
||||||
|
(XEN) rax: 80007d2f7fccb780 rbx: 0000000000000009 rcx: 0000000000000000
|
||||||
|
(XEN) rdx: ffff82d08031ed40 rsi: ffff82d080334980 rdi: 0000000000000000
|
||||||
|
(XEN) rbp: ffff83010000fe20 rsp: ffff83010000fd40 r8: 0000000000000004
|
||||||
|
(XEN) r9: 0000ffff0000ffff r10: 00ff00ff00ff00ff r11: 0f0f0f0f0f0f0f0f
|
||||||
|
(XEN) r12: ffff8303191ea870 r13: ffff8303226aadf0 r14: 0000000000000009
|
||||||
|
(XEN) r15: 0000000000000008 cr0: 000000008005003b cr4: 00000000000026f0
|
||||||
|
(XEN) cr3: 00000000dba9d000 cr2: 0000000000000000
|
||||||
|
(XEN) ds: 0000 es: 0000 fs: 0000 gs: 0000 ss: 0000 cs: e008
|
||||||
|
(XEN) ... ... ...
|
||||||
|
(XEN) Xen call trace:
|
||||||
|
(XEN) [<ffff82d080123078>] csched_schedule+0x4be/0xb97
|
||||||
|
(XEN) [<ffff82d08012c732>] schedule+0x12a/0x63c
|
||||||
|
(XEN) [<ffff82d08012f8c8>] __do_softirq+0x82/0x8d
|
||||||
|
(XEN) [<ffff82d08012f920>] do_softirq+0x13/0x15
|
||||||
|
(XEN) [<ffff82d080164791>] idle_loop+0x5b/0x6b
|
||||||
|
(XEN)
|
||||||
|
(XEN) ****************************************
|
||||||
|
(XEN) Panic on CPU 8:
|
||||||
|
(XEN) GENERAL PROTECTION FAULT
|
||||||
|
(XEN) [error_code=0000]
|
||||||
|
(XEN) ****************************************
|
||||||
|
|
||||||
|
The reason why the error is a #GP fault is that, without
|
||||||
|
this commit, we try to access the per-cpu area of a not
|
||||||
|
yet allocated and initialized pCPU.
|
||||||
|
In fact, %rax, which is what is used as pointer, is
|
||||||
|
80007d2f7fccb780, and we also have this:
|
||||||
|
|
||||||
|
#define INVALID_PERCPU_AREA (0x8000000000000000L - (long)__per_cpu_start)
|
||||||
|
|
||||||
|
Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
|
||||||
|
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
Acked-by: Juergen Gross <jgross@suse.com>
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/smpboot.c
|
||||||
|
+++ b/xen/arch/x86/smpboot.c
|
||||||
|
@@ -816,7 +816,6 @@ void __cpu_disable(void)
|
||||||
|
remove_siblinginfo(cpu);
|
||||||
|
|
||||||
|
/* It's now safe to remove this processor from the online map */
|
||||||
|
- cpumask_clear_cpu(cpu, cpupool0->cpu_valid);
|
||||||
|
cpumask_clear_cpu(cpu, &cpu_online_map);
|
||||||
|
fixup_irqs();
|
||||||
|
|
||||||
|
--- a/xen/common/cpupool.c
|
||||||
|
+++ b/xen/common/cpupool.c
|
||||||
|
@@ -529,6 +529,7 @@ static int cpupool_cpu_remove(unsigned i
|
||||||
|
if ( cpumask_test_cpu(cpu, (*c)->cpu_valid ) )
|
||||||
|
{
|
||||||
|
cpumask_set_cpu(cpu, (*c)->cpu_suspended);
|
||||||
|
+ cpumask_clear_cpu(cpu, (*c)->cpu_valid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -551,6 +552,7 @@ static int cpupool_cpu_remove(unsigned i
|
||||||
|
* If we are not suspending, we are hot-unplugging cpu, and that is
|
||||||
|
* allowed only for CPUs in pool0.
|
||||||
|
*/
|
||||||
|
+ cpumask_clear_cpu(cpu, cpupool0->cpu_valid);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
141
559bc64e-credit1-properly-deal-with-CPUs-not-in-any-pool.patch
Normal file
141
559bc64e-credit1-properly-deal-with-CPUs-not-in-any-pool.patch
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
# Commit 02ea5031825d984d52eb9a982b8457e3434137f0
|
||||||
|
# Date 2015-07-07 14:30:06 +0200
|
||||||
|
# Author Dario Faggioli <dario.faggioli@citrix.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
credit1: properly deal with pCPUs not in any cpupool
|
||||||
|
|
||||||
|
Ideally, the pCPUs that are 'free', i.e., not assigned
|
||||||
|
to any cpupool, should not be considred by the scheduler
|
||||||
|
for load balancing or anything. In Credit1, we fail at
|
||||||
|
this, because of how we use cpupool_scheduler_cpumask().
|
||||||
|
In fact, for a free pCPU, cpupool_scheduler_cpumask()
|
||||||
|
returns a pointer to cpupool_free_cpus, and hence, near
|
||||||
|
the top of csched_load_balance():
|
||||||
|
|
||||||
|
if ( unlikely(!cpumask_test_cpu(cpu, online)) )
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
is false (the pCPU _is_ free!), and we therefore do not
|
||||||
|
jump to the end right away, as we should. This, causes
|
||||||
|
the following splat when resuming from ACPI S3 with
|
||||||
|
pCPUs not assigned to any pool:
|
||||||
|
|
||||||
|
(XEN) ----[ Xen-4.6-unstable x86_64 debug=y Tainted: C ]----
|
||||||
|
(XEN) ... ... ...
|
||||||
|
(XEN) Xen call trace:
|
||||||
|
(XEN) [<ffff82d080122eaa>] csched_load_balance+0x213/0x794
|
||||||
|
(XEN) [<ffff82d08012374c>] csched_schedule+0x321/0x452
|
||||||
|
(XEN) [<ffff82d08012c85e>] schedule+0x12a/0x63c
|
||||||
|
(XEN) [<ffff82d08012fa09>] __do_softirq+0x82/0x8d
|
||||||
|
(XEN) [<ffff82d08012fa61>] do_softirq+0x13/0x15
|
||||||
|
(XEN) [<ffff82d080164780>] idle_loop+0x5b/0x6b
|
||||||
|
(XEN)
|
||||||
|
(XEN)
|
||||||
|
(XEN) ****************************************
|
||||||
|
(XEN) Panic on CPU 8:
|
||||||
|
(XEN) GENERAL PROTECTION FAULT
|
||||||
|
(XEN) [error_code=0000]
|
||||||
|
(XEN) ****************************************
|
||||||
|
|
||||||
|
The cure is:
|
||||||
|
* use cpupool_online_cpumask(), as a better guard to the
|
||||||
|
case when the cpu is being offlined;
|
||||||
|
* explicitly check whether the cpu is free.
|
||||||
|
|
||||||
|
SEDF is in a similar situation, so fix it too.
|
||||||
|
|
||||||
|
Still in Credit1, we must make sure that free (or offline)
|
||||||
|
CPUs are not considered "ticklable". Not doing so would impair
|
||||||
|
the load balancing algorithm, making the scheduler think that
|
||||||
|
it is possible to 'ask' the pCPU to pick up some work, while
|
||||||
|
in reallity, that will never happen! Evidence of such behavior
|
||||||
|
is shown in this trace:
|
||||||
|
|
||||||
|
Name CPU list
|
||||||
|
Pool-0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
|
||||||
|
|
||||||
|
0.112998198 | ||.|| -|x||-|- d0v0 runstate_change d0v4 offline->runnable
|
||||||
|
] 0.112998198 | ||.|| -|x||-|- d0v0 22006(2:2:6) 1 [ f ]
|
||||||
|
] 0.112999612 | ||.|| -|x||-|- d0v0 28004(2:8:4) 2 [ 0 4 ]
|
||||||
|
0.113003387 | ||.|| -||||-|x d32767v15 runstate_continue d32767v15 running->running
|
||||||
|
|
||||||
|
where "22006(2:2:6) 1 [ f ]" means that pCPU 15, which is
|
||||||
|
free from any pool, is tickled.
|
||||||
|
|
||||||
|
The cure, in this case, is to filter out the free pCPUs,
|
||||||
|
within __runq_tickle().
|
||||||
|
|
||||||
|
Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
|
||||||
|
Acked-by: Juergen Gross <jgross@suse.com>
|
||||||
|
Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/common/sched_credit.c
|
||||||
|
+++ b/xen/common/sched_credit.c
|
||||||
|
@@ -350,12 +350,17 @@ __runq_tickle(unsigned int cpu, struct c
|
||||||
|
{
|
||||||
|
struct csched_vcpu * const cur = CSCHED_VCPU(curr_on_cpu(cpu));
|
||||||
|
struct csched_private *prv = CSCHED_PRIV(per_cpu(scheduler, cpu));
|
||||||
|
- cpumask_t mask, idle_mask;
|
||||||
|
+ cpumask_t mask, idle_mask, *online;
|
||||||
|
int balance_step, idlers_empty;
|
||||||
|
|
||||||
|
ASSERT(cur);
|
||||||
|
cpumask_clear(&mask);
|
||||||
|
- idlers_empty = cpumask_empty(prv->idlers);
|
||||||
|
+
|
||||||
|
+ /* cpu is vc->processor, so it must be in a cpupool. */
|
||||||
|
+ ASSERT(per_cpu(cpupool, cpu) != NULL);
|
||||||
|
+ online = cpupool_online_cpumask(per_cpu(cpupool, cpu));
|
||||||
|
+ cpumask_and(&idle_mask, prv->idlers, online);
|
||||||
|
+ idlers_empty = cpumask_empty(&idle_mask);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -392,8 +397,8 @@ __runq_tickle(unsigned int cpu, struct c
|
||||||
|
/* Are there idlers suitable for new (for this balance step)? */
|
||||||
|
csched_balance_cpumask(new->vcpu, balance_step,
|
||||||
|
csched_balance_mask);
|
||||||
|
- cpumask_and(&idle_mask, prv->idlers, csched_balance_mask);
|
||||||
|
- new_idlers_empty = cpumask_empty(&idle_mask);
|
||||||
|
+ cpumask_and(csched_balance_mask, csched_balance_mask, &idle_mask);
|
||||||
|
+ new_idlers_empty = cpumask_empty(csched_balance_mask);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Let's not be too harsh! If there aren't idlers suitable
|
||||||
|
@@ -1494,6 +1499,7 @@ static struct csched_vcpu *
|
||||||
|
csched_load_balance(struct csched_private *prv, int cpu,
|
||||||
|
struct csched_vcpu *snext, bool_t *stolen)
|
||||||
|
{
|
||||||
|
+ struct cpupool *c = per_cpu(cpupool, cpu);
|
||||||
|
struct csched_vcpu *speer;
|
||||||
|
cpumask_t workers;
|
||||||
|
cpumask_t *online;
|
||||||
|
@@ -1501,10 +1507,13 @@ csched_load_balance(struct csched_privat
|
||||||
|
int node = cpu_to_node(cpu);
|
||||||
|
|
||||||
|
BUG_ON( cpu != snext->vcpu->processor );
|
||||||
|
- online = cpupool_scheduler_cpumask(per_cpu(cpupool, cpu));
|
||||||
|
+ online = cpupool_online_cpumask(c);
|
||||||
|
|
||||||
|
- /* If this CPU is going offline we shouldn't steal work. */
|
||||||
|
- if ( unlikely(!cpumask_test_cpu(cpu, online)) )
|
||||||
|
+ /*
|
||||||
|
+ * If this CPU is going offline, or is not (yet) part of any cpupool
|
||||||
|
+ * (as it happens, e.g., during cpu bringup), we shouldn't steal work.
|
||||||
|
+ */
|
||||||
|
+ if ( unlikely(!cpumask_test_cpu(cpu, online) || c == NULL) )
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if ( snext->pri == CSCHED_PRI_IDLE )
|
||||||
|
--- a/xen/common/sched_sedf.c
|
||||||
|
+++ b/xen/common/sched_sedf.c
|
||||||
|
@@ -791,7 +791,8 @@ static struct task_slice sedf_do_schedul
|
||||||
|
if ( tasklet_work_scheduled ||
|
||||||
|
(list_empty(runq) && list_empty(waitq)) ||
|
||||||
|
unlikely(!cpumask_test_cpu(cpu,
|
||||||
|
- cpupool_scheduler_cpumask(per_cpu(cpupool, cpu)))) )
|
||||||
|
+ cpupool_online_cpumask(per_cpu(cpupool, cpu))) ||
|
||||||
|
+ per_cpu(cpupool, cpu) == NULL) )
|
||||||
|
{
|
||||||
|
ret.task = IDLETASK(cpu);
|
||||||
|
ret.time = SECONDS(1);
|
@ -0,0 +1,68 @@
|
|||||||
|
# Commit bbbe7e7157a964c485fb861765be291734676932
|
||||||
|
# Date 2015-07-07 14:39:27 +0200
|
||||||
|
# Author Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
x86/hvmloader: avoid data corruption with xenstore reads/writes
|
||||||
|
|
||||||
|
The functions ring_read and ring_write() have logic to try and deal with
|
||||||
|
partial reads and writes.
|
||||||
|
|
||||||
|
However, in all cases where the "while (len)" loop executed twice, data
|
||||||
|
corruption would occur as the second memcpy() starts from the beginning of
|
||||||
|
"data" again, rather than from where it got to.
|
||||||
|
|
||||||
|
This bug manifested itself as protocol corruption when a reply header crossed
|
||||||
|
the first wrap of the response ring. However, similar corruption would also
|
||||||
|
occur if hvmloader observed xenstored performing partial writes of the block
|
||||||
|
in question, or if hvmloader had to wait for xenstored to make space in either
|
||||||
|
ring.
|
||||||
|
|
||||||
|
Reported-by: Adam Kucia <djexit@o2.pl>
|
||||||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
|
--- a/tools/firmware/hvmloader/xenbus.c
|
||||||
|
+++ b/tools/firmware/hvmloader/xenbus.c
|
||||||
|
@@ -105,7 +105,7 @@ void xenbus_shutdown(void)
|
||||||
|
/* Helper functions: copy data in and out of the ring */
|
||||||
|
static void ring_write(const char *data, uint32_t len)
|
||||||
|
{
|
||||||
|
- uint32_t part;
|
||||||
|
+ uint32_t part, done = 0;
|
||||||
|
|
||||||
|
ASSERT(len <= XENSTORE_PAYLOAD_MAX);
|
||||||
|
|
||||||
|
@@ -122,16 +122,18 @@ static void ring_write(const char *data,
|
||||||
|
if ( part > len )
|
||||||
|
part = len;
|
||||||
|
|
||||||
|
- memcpy(rings->req + MASK_XENSTORE_IDX(rings->req_prod), data, part);
|
||||||
|
+ memcpy(rings->req + MASK_XENSTORE_IDX(rings->req_prod),
|
||||||
|
+ data + done, part);
|
||||||
|
barrier(); /* = wmb before prod write, rmb before next cons read */
|
||||||
|
rings->req_prod += part;
|
||||||
|
len -= part;
|
||||||
|
+ done += part;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ring_read(char *data, uint32_t len)
|
||||||
|
{
|
||||||
|
- uint32_t part;
|
||||||
|
+ uint32_t part, done = 0;
|
||||||
|
|
||||||
|
ASSERT(len <= XENSTORE_PAYLOAD_MAX);
|
||||||
|
|
||||||
|
@@ -148,10 +150,12 @@ static void ring_read(char *data, uint32
|
||||||
|
if ( part > len )
|
||||||
|
part = len;
|
||||||
|
|
||||||
|
- memcpy(data, rings->rsp + MASK_XENSTORE_IDX(rings->rsp_cons), part);
|
||||||
|
+ memcpy(data + done,
|
||||||
|
+ rings->rsp + MASK_XENSTORE_IDX(rings->rsp_cons), part);
|
||||||
|
barrier(); /* = wmb before cons write, rmb before next prod read */
|
||||||
|
rings->rsp_cons += part;
|
||||||
|
len -= part;
|
||||||
|
+ done += part;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
Subject: xl: correct handling of extra_config in main_cpupoolcreate
|
||||||
|
From: Wei Liu wei.liu2@citrix.com Tue Jul 14 17:41:10 2015 +0100
|
||||||
|
Date: Wed Jul 15 10:58:08 2015 +0100:
|
||||||
|
Git: 705c9e12426cba82804cb578fc70785281655d94
|
||||||
|
|
||||||
|
Don't dereference extra_config if it's NULL. Don't leak extra_config in
|
||||||
|
the end.
|
||||||
|
|
||||||
|
Also fixed a typo in error string while I was there.
|
||||||
|
|
||||||
|
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
||||||
|
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||||
|
|
||||||
|
Index: xen-4.5.1-testing/tools/libxl/xl_cmdimpl.c
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.5.1-testing.orig/tools/libxl/xl_cmdimpl.c
|
||||||
|
+++ xen-4.5.1-testing/tools/libxl/xl_cmdimpl.c
|
||||||
|
@@ -7085,9 +7085,9 @@ int main_cpupoolcreate(int argc, char **
|
||||||
|
else
|
||||||
|
config_src="command line";
|
||||||
|
|
||||||
|
- if (strlen(extra_config)) {
|
||||||
|
+ if (extra_config && strlen(extra_config)) {
|
||||||
|
if (config_len > INT_MAX - (strlen(extra_config) + 2)) {
|
||||||
|
- fprintf(stderr, "Failed to attach extra configration\n");
|
||||||
|
+ fprintf(stderr, "Failed to attach extra configuration\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
config_data = xrealloc(config_data,
|
||||||
|
@@ -7211,6 +7211,7 @@ out_cfg:
|
||||||
|
out:
|
||||||
|
free(name);
|
||||||
|
free(config_data);
|
||||||
|
+ free(extra_config);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
24
55a66a1e-make-rangeset_report_ranges-report-all-ranges.patch
Normal file
24
55a66a1e-make-rangeset_report_ranges-report-all-ranges.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Commit b1c780cd315eb4db06be3bbb5c6d80b1cabd27a9
|
||||||
|
# Date 2015-07-15 16:11:42 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
make rangeset_report_ranges() report all ranges
|
||||||
|
|
||||||
|
find_range() returns NULL when s is below the lowest range, so we have
|
||||||
|
to use first_range() here (which is as good performance wise), or else
|
||||||
|
no range gets reported at all in that case.
|
||||||
|
|
||||||
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/common/rangeset.c
|
||||||
|
+++ b/xen/common/rangeset.c
|
||||||
|
@@ -289,7 +289,7 @@ int rangeset_report_ranges(
|
||||||
|
|
||||||
|
read_lock(&r->lock);
|
||||||
|
|
||||||
|
- for ( x = find_range(r, s); x && (x->s <= e) && !rc; x = next_range(r, x) )
|
||||||
|
+ for ( x = first_range(r); x && (x->s <= e) && !rc; x = next_range(r, x) )
|
||||||
|
if ( x->e >= s )
|
||||||
|
rc = cb(max(x->s, s), min(x->e, e), ctxt);
|
||||||
|
|
135
55a77e4f-dmar-device-scope-mem-leak-fix.patch
Normal file
135
55a77e4f-dmar-device-scope-mem-leak-fix.patch
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
# Commit a8bc99b981c5ad773bd646f5986e616d26fb94d7
|
||||||
|
# Date 2015-07-16 11:50:07 +0200
|
||||||
|
# Author Elena Ufimtseva <elena.ufimtseva@oracle.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
dmar: device scope mem leak fix
|
||||||
|
|
||||||
|
Release memory allocated for scope.devices dmar units on various
|
||||||
|
failure paths and when disabling dmar. Set device count after
|
||||||
|
sucessfull memory allocation, not before, in device scope parsing function.
|
||||||
|
|
||||||
|
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
|
||||||
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
Acked-by: Yang Zhang <yang.z.zhang@intel.com>
|
||||||
|
|
||||||
|
# Commit 132231d10343608faf5892785a08acc500326d04
|
||||||
|
# Date 2015-07-16 15:23:37 +0200
|
||||||
|
# Author Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
|
dmar: fix double free in error paths following c/s a8bc99b
|
||||||
|
|
||||||
|
Several error paths would end up freeing scope->devices twice.
|
||||||
|
|
||||||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
--- a/xen/drivers/passthrough/vtd/dmar.c
|
||||||
|
+++ b/xen/drivers/passthrough/vtd/dmar.c
|
||||||
|
@@ -80,6 +80,16 @@ static int __init acpi_register_rmrr_uni
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void scope_devices_free(struct dmar_scope *scope)
|
||||||
|
+{
|
||||||
|
+ if ( !scope )
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ scope->devices_cnt = 0;
|
||||||
|
+ xfree(scope->devices);
|
||||||
|
+ scope->devices = NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void __init disable_all_dmar_units(void)
|
||||||
|
{
|
||||||
|
struct acpi_drhd_unit *drhd, *_drhd;
|
||||||
|
@@ -89,16 +99,19 @@ static void __init disable_all_dmar_unit
|
||||||
|
list_for_each_entry_safe ( drhd, _drhd, &acpi_drhd_units, list )
|
||||||
|
{
|
||||||
|
list_del(&drhd->list);
|
||||||
|
+ scope_devices_free(&drhd->scope);
|
||||||
|
xfree(drhd);
|
||||||
|
}
|
||||||
|
list_for_each_entry_safe ( rmrr, _rmrr, &acpi_rmrr_units, list )
|
||||||
|
{
|
||||||
|
list_del(&rmrr->list);
|
||||||
|
+ scope_devices_free(&rmrr->scope);
|
||||||
|
xfree(rmrr);
|
||||||
|
}
|
||||||
|
list_for_each_entry_safe ( atsr, _atsr, &acpi_atsr_units, list )
|
||||||
|
{
|
||||||
|
list_del(&atsr->list);
|
||||||
|
+ scope_devices_free(&atsr->scope);
|
||||||
|
xfree(atsr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -317,13 +330,13 @@ static int __init acpi_parse_dev_scope(
|
||||||
|
if ( (cnt = scope_device_count(start, end)) < 0 )
|
||||||
|
return cnt;
|
||||||
|
|
||||||
|
- scope->devices_cnt = cnt;
|
||||||
|
if ( cnt > 0 )
|
||||||
|
{
|
||||||
|
scope->devices = xzalloc_array(u16, cnt);
|
||||||
|
if ( !scope->devices )
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
+ scope->devices_cnt = cnt;
|
||||||
|
|
||||||
|
while ( start < end )
|
||||||
|
{
|
||||||
|
@@ -426,7 +439,7 @@ static int __init acpi_parse_dev_scope(
|
||||||
|
|
||||||
|
out:
|
||||||
|
if ( ret )
|
||||||
|
- xfree(scope->devices);
|
||||||
|
+ scope_devices_free(scope);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -541,6 +554,7 @@ acpi_parse_one_drhd(struct acpi_dmar_hea
|
||||||
|
" Workaround BIOS bug: ignore the DRHD due to all "
|
||||||
|
"devices under its scope are not PCI discoverable!\n");
|
||||||
|
|
||||||
|
+ scope_devices_free(&dmaru->scope);
|
||||||
|
iommu_free(dmaru);
|
||||||
|
xfree(dmaru);
|
||||||
|
}
|
||||||
|
@@ -561,9 +575,11 @@ acpi_parse_one_drhd(struct acpi_dmar_hea
|
||||||
|
out:
|
||||||
|
if ( ret )
|
||||||
|
{
|
||||||
|
+ scope_devices_free(&dmaru->scope);
|
||||||
|
iommu_free(dmaru);
|
||||||
|
xfree(dmaru);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -657,6 +673,7 @@ acpi_parse_one_rmrr(struct acpi_dmar_hea
|
||||||
|
" Ignore the RMRR (%"PRIx64", %"PRIx64") due to "
|
||||||
|
"devices under its scope are not PCI discoverable!\n",
|
||||||
|
rmrru->base_address, rmrru->end_address);
|
||||||
|
+ scope_devices_free(&rmrru->scope);
|
||||||
|
xfree(rmrru);
|
||||||
|
}
|
||||||
|
else if ( base_addr > end_addr )
|
||||||
|
@@ -664,6 +681,7 @@ acpi_parse_one_rmrr(struct acpi_dmar_hea
|
||||||
|
dprintk(XENLOG_WARNING VTDPREFIX,
|
||||||
|
" The RMRR (%"PRIx64", %"PRIx64") is incorrect!\n",
|
||||||
|
rmrru->base_address, rmrru->end_address);
|
||||||
|
+ scope_devices_free(&rmrru->scope);
|
||||||
|
xfree(rmrru);
|
||||||
|
ret = -EFAULT;
|
||||||
|
}
|
||||||
|
@@ -726,7 +744,10 @@ acpi_parse_one_atsr(struct acpi_dmar_hea
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ret )
|
||||||
|
+ {
|
||||||
|
+ scope_devices_free(&atsru->scope);
|
||||||
|
xfree(atsru);
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
acpi_register_atsr_unit(atsru);
|
||||||
|
return ret;
|
@ -1,3 +1,9 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
|
# Commit a88b72fddd046a0978242411276861039ec99ad0
|
||||||
|
# Date 2015-07-23 10:13:12 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
x86/PCI: add config space abstract write intercept logic
|
x86/PCI: add config space abstract write intercept logic
|
||||||
|
|
||||||
This is to be used by MSI code, and later to also be hooked up to
|
This is to be used by MSI code, and later to also be hooked up to
|
||||||
@ -6,8 +12,8 @@ MMCFG accesses by Dom0.
|
|||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-07-08 11:45:59.000000000 +0200
|
--- a/xen/arch/x86/msi.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-06-22 09:06:30.000000000 +0200
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -1108,6 +1108,12 @@ void pci_cleanup_msi(struct pci_dev *pde
|
@@ -1108,6 +1108,12 @@ void pci_cleanup_msi(struct pci_dev *pde
|
||||||
msi_free_irqs(pdev);
|
msi_free_irqs(pdev);
|
||||||
}
|
}
|
||||||
@ -21,8 +27,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
int pci_restore_msi_state(struct pci_dev *pdev)
|
int pci_restore_msi_state(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
--- sle12sp1.orig/xen/arch/x86/pci.c 2015-07-08 11:45:59.000000000 +0200
|
--- a/xen/arch/x86/pci.c
|
||||||
+++ sle12sp1/xen/arch/x86/pci.c 2015-06-19 16:08:11.000000000 +0200
|
+++ b/xen/arch/x86/pci.c
|
||||||
@@ -67,3 +67,28 @@ void pci_conf_write(uint32_t cf8, uint8_
|
@@ -67,3 +67,28 @@ void pci_conf_write(uint32_t cf8, uint8_
|
||||||
|
|
||||||
spin_unlock_irqrestore(&pci_config_lock, flags);
|
spin_unlock_irqrestore(&pci_config_lock, flags);
|
||||||
@ -52,8 +58,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
+
|
+
|
||||||
+ return rc;
|
+ return rc;
|
||||||
+}
|
+}
|
||||||
--- sle12sp1.orig/xen/arch/x86/traps.c 2015-07-08 11:45:59.000000000 +0200
|
--- a/xen/arch/x86/traps.c
|
||||||
+++ sle12sp1/xen/arch/x86/traps.c 2015-06-19 15:52:47.000000000 +0200
|
+++ b/xen/arch/x86/traps.c
|
||||||
@@ -1708,8 +1708,8 @@ static int admin_io_okay(
|
@@ -1708,8 +1708,8 @@ static int admin_io_okay(
|
||||||
return ioports_access_permitted(v->domain, port, port + bytes - 1);
|
return ioports_access_permitted(v->domain, port, port + bytes - 1);
|
||||||
}
|
}
|
||||||
@ -98,8 +104,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
pci_conf_write(v->domain->arch.pci_cf8, port & 3, size, data);
|
pci_conf_write(v->domain->arch.pci_cf8, port & 3, size, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/pci.h 2015-07-08 11:45:59.000000000 +0200
|
--- a/xen/include/asm-x86/pci.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/pci.h 2015-06-19 15:52:03.000000000 +0200
|
+++ b/xen/include/asm-x86/pci.h
|
||||||
@@ -15,4 +15,11 @@ struct arch_pci_dev {
|
@@ -15,4 +15,11 @@ struct arch_pci_dev {
|
||||||
vmask_t used_vectors;
|
vmask_t used_vectors;
|
||||||
};
|
};
|
@ -1,3 +1,9 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
|
# Commit 484d7c852e4ff79c945406ed28b5db63a5a0b7f3
|
||||||
|
# Date 2015-07-23 10:14:13 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
x86/MSI-X: track host and guest mask-all requests separately
|
x86/MSI-X: track host and guest mask-all requests separately
|
||||||
|
|
||||||
Host uses of the bits will be added subsequently, and must not be
|
Host uses of the bits will be added subsequently, and must not be
|
||||||
@ -7,8 +13,8 @@ a guest).
|
|||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-06-22 09:06:30.000000000 +0200
|
--- a/xen/arch/x86/msi.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-06-22 09:23:08.000000000 +0200
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -843,6 +843,12 @@ static int msix_capability_init(struct p
|
@@ -843,6 +843,12 @@ static int msix_capability_init(struct p
|
||||||
|
|
||||||
if ( !msix->used_entries )
|
if ( !msix->used_entries )
|
||||||
@ -57,8 +63,8 @@ Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/asm-x86/msi.h 2015-07-08 00:00:00.000000000 +0200
|
--- a/xen/include/asm-x86/msi.h
|
||||||
+++ sle12sp1/xen/include/asm-x86/msi.h 2015-06-19 09:32:02.000000000 +0200
|
+++ b/xen/include/asm-x86/msi.h
|
||||||
@@ -228,6 +228,7 @@ struct arch_msix {
|
@@ -228,6 +228,7 @@ struct arch_msix {
|
||||||
int table_refcnt[MAX_MSIX_TABLE_PAGES];
|
int table_refcnt[MAX_MSIX_TABLE_PAGES];
|
||||||
int table_idx[MAX_MSIX_TABLE_PAGES];
|
int table_idx[MAX_MSIX_TABLE_PAGES];
|
@ -1,3 +1,9 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
|
# Commit 082fdc6ce85e5b603f8fb24553cf200e3b67889f
|
||||||
|
# Date 2015-07-23 10:14:59 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
x86/MSI-X: be more careful during teardown
|
x86/MSI-X: be more careful during teardown
|
||||||
|
|
||||||
When a device gets detached from a guest, pciback will clear its
|
When a device gets detached from a guest, pciback will clear its
|
||||||
@ -24,8 +30,8 @@ Backporting note (largely to myself):
|
|||||||
"x86/MSI: drop workaround for insecure Dom0 kernels" (due to re-use
|
"x86/MSI: drop workaround for insecure Dom0 kernels" (due to re-use
|
||||||
of struct arch_msix's warned field).
|
of struct arch_msix's warned field).
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/irq.c 2015-07-08 11:47:52.000000000 +0200
|
--- a/xen/arch/x86/irq.c
|
||||||
+++ sle12sp1/xen/arch/x86/irq.c 2015-07-07 18:01:32.000000000 +0200
|
+++ b/xen/arch/x86/irq.c
|
||||||
@@ -217,9 +217,9 @@ void destroy_irq(unsigned int irq)
|
@@ -217,9 +217,9 @@ void destroy_irq(unsigned int irq)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,8 +63,8 @@ Backporting note (largely to myself):
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Mark any remaining pending EOIs as ready to flush.
|
* Mark any remaining pending EOIs as ready to flush.
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-06-22 09:23:08.000000000 +0200
|
--- a/xen/arch/x86/msi.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-07-07 18:01:16.000000000 +0200
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -123,6 +123,27 @@ static void msix_put_fixmap(struct arch_
|
@@ -123,6 +123,27 @@ static void msix_put_fixmap(struct arch_
|
||||||
spin_unlock(&msix->table_lock);
|
spin_unlock(&msix->table_lock);
|
||||||
}
|
}
|
@ -1,3 +1,9 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
|
# Commit 0dba393db07331e9cff42df10e95b67547dfdb3e
|
||||||
|
# Date 2015-07-23 10:15:39 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
x86/MSI-X: access MSI-X table only after having enabled MSI-X
|
x86/MSI-X: access MSI-X table only after having enabled MSI-X
|
||||||
|
|
||||||
As done in Linux by f598282f51 ("PCI: Fix the NIU MSI-X problem in a
|
As done in Linux by f598282f51 ("PCI: Fix the NIU MSI-X problem in a
|
||||||
@ -8,8 +14,8 @@ instead to prevent interrupts from occurring.
|
|||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-07-07 18:01:16.000000000 +0200
|
--- a/xen/arch/x86/msi.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-07-07 18:01:41.000000000 +0200
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -144,6 +144,17 @@ static bool_t memory_decoded(const struc
|
@@ -144,6 +144,17 @@ static bool_t memory_decoded(const struc
|
||||||
PCI_COMMAND_MEMORY);
|
PCI_COMMAND_MEMORY);
|
||||||
}
|
}
|
@ -1,3 +1,9 @@
|
|||||||
|
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967
|
||||||
|
|
||||||
|
# Commit aa7c1fdf9dd04a1287f4770906b2c41b88a28228
|
||||||
|
# Date 2015-07-23 10:16:27 +0200
|
||||||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||||||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||||||
x86/MSI: properly track guest masking requests
|
x86/MSI: properly track guest masking requests
|
||||||
|
|
||||||
... by monitoring writes to the mask register.
|
... by monitoring writes to the mask register.
|
||||||
@ -5,9 +11,10 @@ x86/MSI: properly track guest masking requests
|
|||||||
This allows reverting the main effect of the XSA-129 patches in qemu.
|
This allows reverting the main effect of the XSA-129 patches in qemu.
|
||||||
|
|
||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||||
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-07-07 18:01:41.000000000 +0200
|
--- a/xen/arch/x86/msi.c
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-07-07 18:01:47.000000000 +0200
|
+++ b/xen/arch/x86/msi.c
|
||||||
@@ -1303,6 +1303,37 @@ int pci_msi_conf_write_intercept(struct
|
@@ -1303,6 +1303,37 @@ int pci_msi_conf_write_intercept(struct
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
63
55c1d83d-x86-gdt-Drop-write-only-xalloc-d-array.patch
Normal file
63
55c1d83d-x86-gdt-Drop-write-only-xalloc-d-array.patch
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Commit a7bd9b1661304500cd18b7d216d616ecf053ebdb
|
||||||
|
# Date 2015-08-05 10:32:45 +0100
|
||||||
|
# Author Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
# Committer Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
x86/gdt: Drop write-only, xalloc()'d array from set_gdt()
|
||||||
|
|
||||||
|
It is not used, and can cause a spurious failure of the set_gdt() hypercall in
|
||||||
|
low memory situations.
|
||||||
|
|
||||||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
|
||||||
|
Reviewed-by: Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/mm.c
|
||||||
|
+++ b/xen/arch/x86/mm.c
|
||||||
|
@@ -4383,20 +4383,15 @@ long set_gdt(struct vcpu *v,
|
||||||
|
l1_pgentry_t *pl1e;
|
||||||
|
/* NB. There are 512 8-byte entries per GDT page. */
|
||||||
|
int i, nr_pages = (entries + 511) / 512;
|
||||||
|
- unsigned long mfn, *pfns;
|
||||||
|
|
||||||
|
if ( entries > FIRST_RESERVED_GDT_ENTRY )
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
- pfns = xmalloc_array(unsigned long, nr_pages);
|
||||||
|
- if ( !pfns )
|
||||||
|
- return -ENOMEM;
|
||||||
|
-
|
||||||
|
/* Check the pages in the new GDT. */
|
||||||
|
for ( i = 0; i < nr_pages; i++ )
|
||||||
|
{
|
||||||
|
struct page_info *page;
|
||||||
|
- pfns[i] = frames[i];
|
||||||
|
+
|
||||||
|
page = get_page_from_gfn(d, frames[i], NULL, P2M_ALLOC);
|
||||||
|
if ( !page )
|
||||||
|
goto fail;
|
||||||
|
@@ -4405,7 +4400,7 @@ long set_gdt(struct vcpu *v,
|
||||||
|
put_page(page);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
- mfn = frames[i] = page_to_mfn(page);
|
||||||
|
+ frames[i] = page_to_mfn(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tear down the old GDT. */
|
||||||
|
@@ -4420,7 +4415,6 @@ long set_gdt(struct vcpu *v,
|
||||||
|
l1e_write(&pl1e[i], l1e_from_pfn(frames[i], __PAGE_HYPERVISOR));
|
||||||
|
}
|
||||||
|
|
||||||
|
- xfree(pfns);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
@@ -4428,7 +4422,6 @@ long set_gdt(struct vcpu *v,
|
||||||
|
{
|
||||||
|
put_page_and_type(mfn_to_page(frames[i]));
|
||||||
|
}
|
||||||
|
- xfree(pfns);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
169
55c3232b-x86-mm-Make-hap-shadow-teardown-preemptible.patch
Normal file
169
55c3232b-x86-mm-Make-hap-shadow-teardown-preemptible.patch
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
# Commit 0174da5b79752e2d5d6ca0faed89536e8f3d91c7
|
||||||
|
# Date 2015-08-06 10:04:43 +0100
|
||||||
|
# Author Anshul Makkar <anshul.makkar@citrix.com>
|
||||||
|
# Committer Ian Campbell <ian.campbell@citrix.com>
|
||||||
|
x86/mm: Make {hap, shadow}_teardown() preemptible
|
||||||
|
|
||||||
|
A domain with sufficient shadow allocation can cause a watchdog timeout
|
||||||
|
during domain destruction. Expand the existing -ERESTART logic in
|
||||||
|
paging_teardown() to allow {hap/sh}_set_allocation() to become
|
||||||
|
restartable during the DOMCTL_destroydomain hypercall.
|
||||||
|
|
||||||
|
Signed-off-by: Anshul Makkar <anshul.makkar@citrix.com>
|
||||||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||||
|
Reviewed-by: Tim Deegan <tim@xen.org>
|
||||||
|
Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/mm/hap/hap.c
|
||||||
|
+++ b/xen/arch/x86/mm/hap/hap.c
|
||||||
|
@@ -503,7 +503,7 @@ void hap_final_teardown(struct domain *d
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( d->arch.paging.hap.total_pages != 0 )
|
||||||
|
- hap_teardown(d);
|
||||||
|
+ hap_teardown(d, NULL);
|
||||||
|
|
||||||
|
p2m_teardown(p2m_get_hostp2m(d));
|
||||||
|
/* Free any memory that the p2m teardown released */
|
||||||
|
@@ -513,7 +513,7 @@ void hap_final_teardown(struct domain *d
|
||||||
|
paging_unlock(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void hap_teardown(struct domain *d)
|
||||||
|
+void hap_teardown(struct domain *d, int *preempted)
|
||||||
|
{
|
||||||
|
struct vcpu *v;
|
||||||
|
mfn_t mfn;
|
||||||
|
@@ -541,18 +541,11 @@ void hap_teardown(struct domain *d)
|
||||||
|
|
||||||
|
if ( d->arch.paging.hap.total_pages != 0 )
|
||||||
|
{
|
||||||
|
- HAP_PRINTK("teardown of domain %u starts."
|
||||||
|
- " pages total = %u, free = %u, p2m=%u\n",
|
||||||
|
- d->domain_id,
|
||||||
|
- d->arch.paging.hap.total_pages,
|
||||||
|
- d->arch.paging.hap.free_pages,
|
||||||
|
- d->arch.paging.hap.p2m_pages);
|
||||||
|
- hap_set_allocation(d, 0, NULL);
|
||||||
|
- HAP_PRINTK("teardown done."
|
||||||
|
- " pages total = %u, free = %u, p2m=%u\n",
|
||||||
|
- d->arch.paging.hap.total_pages,
|
||||||
|
- d->arch.paging.hap.free_pages,
|
||||||
|
- d->arch.paging.hap.p2m_pages);
|
||||||
|
+ hap_set_allocation(d, 0, preempted);
|
||||||
|
+
|
||||||
|
+ if ( preempted && *preempted )
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
ASSERT(d->arch.paging.hap.total_pages == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -561,6 +554,7 @@ void hap_teardown(struct domain *d)
|
||||||
|
xfree(d->arch.hvm_domain.dirty_vram);
|
||||||
|
d->arch.hvm_domain.dirty_vram = NULL;
|
||||||
|
|
||||||
|
+out:
|
||||||
|
paging_unlock(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/xen/arch/x86/mm/paging.c
|
||||||
|
+++ b/xen/arch/x86/mm/paging.c
|
||||||
|
@@ -779,12 +779,15 @@ long paging_domctl_continuation(XEN_GUES
|
||||||
|
/* Call when destroying a domain */
|
||||||
|
int paging_teardown(struct domain *d)
|
||||||
|
{
|
||||||
|
- int rc;
|
||||||
|
+ int rc, preempted = 0;
|
||||||
|
|
||||||
|
if ( hap_enabled(d) )
|
||||||
|
- hap_teardown(d);
|
||||||
|
+ hap_teardown(d, &preempted);
|
||||||
|
else
|
||||||
|
- shadow_teardown(d);
|
||||||
|
+ shadow_teardown(d, &preempted);
|
||||||
|
+
|
||||||
|
+ if ( preempted )
|
||||||
|
+ return -ERESTART;
|
||||||
|
|
||||||
|
/* clean up log dirty resources. */
|
||||||
|
rc = paging_free_log_dirty_bitmap(d, 0);
|
||||||
|
--- a/xen/arch/x86/mm/shadow/common.c
|
||||||
|
+++ b/xen/arch/x86/mm/shadow/common.c
|
||||||
|
@@ -3030,7 +3030,7 @@ int shadow_enable(struct domain *d, u32
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void shadow_teardown(struct domain *d)
|
||||||
|
+void shadow_teardown(struct domain *d, int *preempted)
|
||||||
|
/* Destroy the shadow pagetables of this domain and free its shadow memory.
|
||||||
|
* Should only be called for dying domains. */
|
||||||
|
{
|
||||||
|
@@ -3091,23 +3091,16 @@ void shadow_teardown(struct domain *d)
|
||||||
|
|
||||||
|
if ( d->arch.paging.shadow.total_pages != 0 )
|
||||||
|
{
|
||||||
|
- SHADOW_PRINTK("teardown of domain %u starts."
|
||||||
|
- " Shadow pages total = %u, free = %u, p2m=%u\n",
|
||||||
|
- d->domain_id,
|
||||||
|
- d->arch.paging.shadow.total_pages,
|
||||||
|
- d->arch.paging.shadow.free_pages,
|
||||||
|
- d->arch.paging.shadow.p2m_pages);
|
||||||
|
/* Destroy all the shadows and release memory to domheap */
|
||||||
|
- sh_set_allocation(d, 0, NULL);
|
||||||
|
+ sh_set_allocation(d, 0, preempted);
|
||||||
|
+
|
||||||
|
+ if ( preempted && *preempted )
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
/* Release the hash table back to xenheap */
|
||||||
|
if (d->arch.paging.shadow.hash_table)
|
||||||
|
shadow_hash_teardown(d);
|
||||||
|
- /* Should not have any more memory held */
|
||||||
|
- SHADOW_PRINTK("teardown done."
|
||||||
|
- " Shadow pages total = %u, free = %u, p2m=%u\n",
|
||||||
|
- d->arch.paging.shadow.total_pages,
|
||||||
|
- d->arch.paging.shadow.free_pages,
|
||||||
|
- d->arch.paging.shadow.p2m_pages);
|
||||||
|
+
|
||||||
|
ASSERT(d->arch.paging.shadow.total_pages == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3138,6 +3131,7 @@ void shadow_teardown(struct domain *d)
|
||||||
|
d->arch.hvm_domain.dirty_vram = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
+out:
|
||||||
|
paging_unlock(d);
|
||||||
|
|
||||||
|
/* Must be called outside the lock */
|
||||||
|
@@ -3159,7 +3153,7 @@ void shadow_final_teardown(struct domain
|
||||||
|
* It is possible for a domain that never got domain_kill()ed
|
||||||
|
* to get here with its shadow allocation intact. */
|
||||||
|
if ( d->arch.paging.shadow.total_pages != 0 )
|
||||||
|
- shadow_teardown(d);
|
||||||
|
+ shadow_teardown(d, NULL);
|
||||||
|
|
||||||
|
/* It is now safe to pull down the p2m map. */
|
||||||
|
p2m_teardown(p2m_get_hostp2m(d));
|
||||||
|
--- a/xen/include/asm-x86/hap.h
|
||||||
|
+++ b/xen/include/asm-x86/hap.h
|
||||||
|
@@ -54,7 +54,7 @@ int hap_domctl(struct domain *d, xen_d
|
||||||
|
XEN_GUEST_HANDLE_PARAM(void) u_domctl);
|
||||||
|
int hap_enable(struct domain *d, u32 mode);
|
||||||
|
void hap_final_teardown(struct domain *d);
|
||||||
|
-void hap_teardown(struct domain *d);
|
||||||
|
+void hap_teardown(struct domain *d, int *preempted);
|
||||||
|
void hap_vcpu_init(struct vcpu *v);
|
||||||
|
int hap_track_dirty_vram(struct domain *d,
|
||||||
|
unsigned long begin_pfn,
|
||||||
|
--- a/xen/include/asm-x86/shadow.h
|
||||||
|
+++ b/xen/include/asm-x86/shadow.h
|
||||||
|
@@ -72,7 +72,7 @@ int shadow_domctl(struct domain *d,
|
||||||
|
XEN_GUEST_HANDLE_PARAM(void) u_domctl);
|
||||||
|
|
||||||
|
/* Call when destroying a domain */
|
||||||
|
-void shadow_teardown(struct domain *d);
|
||||||
|
+void shadow_teardown(struct domain *d, int *preempted);
|
||||||
|
|
||||||
|
/* Call once all of the references to the domain have gone away */
|
||||||
|
void shadow_final_teardown(struct domain *d);
|
@ -1,93 +0,0 @@
|
|||||||
x86/MSI: fix guest unmasking when handling IRQ via event channel
|
|
||||||
|
|
||||||
Rather than assuming only PV guests need special treatment (and
|
|
||||||
dealing with that directly when an IRQ gets set up), keep all guest MSI
|
|
||||||
IRQs masked until either the (HVM) guest unmasks them via vMSI or the
|
|
||||||
(PV, PVHVM, or PVH) guest sets up an event channel for it.
|
|
||||||
|
|
||||||
To not further clutter the common evtchn_bind_pirq() with x86-specific
|
|
||||||
code, introduce an arch_evtchn_bind_pirq() hook instead.
|
|
||||||
|
|
||||||
Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
|
|
||||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Tested-by: Sander Eikelenboom <linux@eikelenboom.it>
|
|
||||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/irq.c 2015-07-08 12:33:47.000000000 +0200
|
|
||||||
+++ sle12sp1/xen/arch/x86/irq.c 2015-07-07 17:04:08.000000000 +0200
|
|
||||||
@@ -2502,6 +2502,25 @@ int unmap_domain_pirq_emuirq(struct doma
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void arch_evtchn_bind_pirq(struct domain *d, int pirq)
|
|
||||||
+{
|
|
||||||
+ int irq = domain_pirq_to_irq(d, pirq);
|
|
||||||
+ struct irq_desc *desc;
|
|
||||||
+ unsigned long flags;
|
|
||||||
+
|
|
||||||
+ if ( irq <= 0 )
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if ( is_hvm_domain(d) )
|
|
||||||
+ map_domain_emuirq_pirq(d, pirq, IRQ_PT);
|
|
||||||
+
|
|
||||||
+ desc = irq_to_desc(irq);
|
|
||||||
+ spin_lock_irqsave(&desc->lock, flags);
|
|
||||||
+ if ( desc->msi_desc )
|
|
||||||
+ guest_mask_msi_irq(desc, 0);
|
|
||||||
+ spin_unlock_irqrestore(&desc->lock, flags);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
bool_t hvm_domain_use_pirq(const struct domain *d, const struct pirq *pirq)
|
|
||||||
{
|
|
||||||
return is_hvm_domain(d) && pirq &&
|
|
||||||
--- sle12sp1.orig/xen/arch/x86/msi.c 2015-07-08 00:00:00.000000000 +0200
|
|
||||||
+++ sle12sp1/xen/arch/x86/msi.c 2015-07-07 16:50:02.000000000 +0200
|
|
||||||
@@ -422,10 +422,7 @@ void guest_mask_msi_irq(struct irq_desc
|
|
||||||
|
|
||||||
static unsigned int startup_msi_irq(struct irq_desc *desc)
|
|
||||||
{
|
|
||||||
- bool_t guest_masked = (desc->status & IRQ_GUEST) &&
|
|
||||||
- is_hvm_domain(desc->msi_desc->dev->domain);
|
|
||||||
-
|
|
||||||
- msi_set_mask_bit(desc, 0, guest_masked);
|
|
||||||
+ msi_set_mask_bit(desc, 0, !!(desc->status & IRQ_GUEST));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/common/event_channel.c 2015-07-08 14:04:08.000000000 +0200
|
|
||||||
+++ sle12sp1/xen/common/event_channel.c 2015-07-07 16:53:47.000000000 +0200
|
|
||||||
@@ -504,10 +504,7 @@ static long evtchn_bind_pirq(evtchn_bind
|
|
||||||
|
|
||||||
bind->port = port;
|
|
||||||
|
|
||||||
-#ifdef CONFIG_X86
|
|
||||||
- if ( is_hvm_domain(d) && domain_pirq_to_irq(d, pirq) > 0 )
|
|
||||||
- map_domain_emuirq_pirq(d, pirq, IRQ_PT);
|
|
||||||
-#endif
|
|
||||||
+ arch_evtchn_bind_pirq(d, pirq);
|
|
||||||
|
|
||||||
out:
|
|
||||||
spin_unlock(&d->event_lock);
|
|
||||||
--- sle12sp1.orig/xen/include/asm-arm/irq.h 2015-07-08 12:33:47.000000000 +0200
|
|
||||||
+++ sle12sp1/xen/include/asm-arm/irq.h 2015-07-07 17:02:00.000000000 +0200
|
|
||||||
@@ -44,6 +44,8 @@ int route_irq_to_guest(struct domain *d,
|
|
||||||
const char *devname);
|
|
||||||
void arch_move_irqs(struct vcpu *v);
|
|
||||||
|
|
||||||
+#define arch_evtchn_bind_pirq(d, pirq) ((void)((d) + (pirq)))
|
|
||||||
+
|
|
||||||
/* Set IRQ type for an SPI */
|
|
||||||
int irq_set_spi_type(unsigned int spi, unsigned int type);
|
|
||||||
|
|
||||||
--- sle12sp1.orig/xen/include/xen/irq.h 2015-07-08 12:33:47.000000000 +0200
|
|
||||||
+++ sle12sp1/xen/include/xen/irq.h 2015-07-07 17:02:49.000000000 +0200
|
|
||||||
@@ -172,4 +172,8 @@ unsigned int set_desc_affinity(struct ir
|
|
||||||
unsigned int arch_hwdom_irqs(domid_t);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifndef arch_evtchn_bind_pirq
|
|
||||||
+void arch_evtchn_bind_pirq(struct domain *, int pirq);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#endif /* __XEN_IRQ_H__ */
|
|
54
xen.changes
54
xen.changes
@ -1,3 +1,50 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 26 16:18:58 MDT 2015 - carnold@suse.com
|
||||||
|
|
||||||
|
- bnc#935634 - VUL-0: CVE-2015-3259: xen: XSA-137: xl command line
|
||||||
|
config handling stack overflow
|
||||||
|
55a62eb0-xl-correct-handling-of-extra_config-in-main_cpupoolcreate.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 18 10:18:20 MDT 2015 - carnold@suse.com
|
||||||
|
|
||||||
|
- bsc#907514 - Bus fatal error & sles12 sudden reboot has been
|
||||||
|
observed
|
||||||
|
- bsc#910258 - SLES12 Xen host crashes with FATAL NMI after
|
||||||
|
shutdown of guest with VT-d NIC
|
||||||
|
- bsc#918984 - Bus fatal error & sles11-SP4 sudden reboot has been
|
||||||
|
observed
|
||||||
|
- bsc#923967 - Partner-L3: Bus fatal error & sles11-SP3 sudden
|
||||||
|
reboot has been observed
|
||||||
|
552d293b-x86-vMSI-X-honor-all-mask-requests.patch
|
||||||
|
552d2966-x86-vMSI-X-add-valid-bits-for-read-acceleration.patch
|
||||||
|
5576f143-x86-adjust-PV-I-O-emulation-functions-types.patch
|
||||||
|
55795a52-x86-vMSI-X-support-qword-MMIO-access.patch
|
||||||
|
5583d9c5-x86-MSI-X-cleanup.patch
|
||||||
|
5583da09-x86-MSI-track-host-and-guest-masking-separately.patch
|
||||||
|
55b0a218-x86-PCI-CFG-write-intercept.patch
|
||||||
|
55b0a255-x86-MSI-X-maskall.patch
|
||||||
|
55b0a283-x86-MSI-X-teardown.patch
|
||||||
|
55b0a2ab-x86-MSI-X-enable.patch
|
||||||
|
55b0a2db-x86-MSI-track-guest-masking.patch
|
||||||
|
- Upstream patches from Jan
|
||||||
|
552d0f49-x86-traps-identify-the-vcpu-in-context-when-dumping-regs.patch
|
||||||
|
559bc633-x86-cpupool-clear-proper-cpu_valid-bit-on-CPU-teardown.patch
|
||||||
|
559bc64e-credit1-properly-deal-with-CPUs-not-in-any-pool.patch
|
||||||
|
559bc87f-x86-hvmloader-avoid-data-corruption-with-xenstore-rw.patch
|
||||||
|
55a66a1e-make-rangeset_report_ranges-report-all-ranges.patch
|
||||||
|
55a77e4f-dmar-device-scope-mem-leak-fix.patch
|
||||||
|
55c1d83d-x86-gdt-Drop-write-only-xalloc-d-array.patch
|
||||||
|
55c3232b-x86-mm-Make-hap-shadow-teardown-preemptible.patch
|
||||||
|
- Dropped for upstream version
|
||||||
|
x86-MSI-mask.patch
|
||||||
|
x86-MSI-pv-unmask.patch
|
||||||
|
x86-MSI-X-enable.patch
|
||||||
|
x86-MSI-X-maskall.patch
|
||||||
|
x86-MSI-X-teardown.patch
|
||||||
|
x86-pci_cfg_okay.patch
|
||||||
|
x86-PCI-CFG-write-intercept.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jul 28 09:04:13 MDT 2015 - carnold@suse.com
|
Tue Jul 28 09:04:13 MDT 2015 - carnold@suse.com
|
||||||
|
|
||||||
@ -91,10 +138,6 @@ Wed Jul 8 11:38:26 MDT 2015 - carnold@suse.com
|
|||||||
x86-MSI-X-teardown.patch
|
x86-MSI-X-teardown.patch
|
||||||
x86-MSI-X-enable.patch
|
x86-MSI-X-enable.patch
|
||||||
x86-MSI-mask.patch
|
x86-MSI-mask.patch
|
||||||
- Dropped
|
|
||||||
qemu-MSI-X-enable-maskall.patch
|
|
||||||
qemu-MSI-X-latch-writes.patch
|
|
||||||
x86-MSI-X-guest-mask.patch
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jul 7 13:35:34 UTC 2015 - ohering@suse.de
|
Tue Jul 7 13:35:34 UTC 2015 - ohering@suse.de
|
||||||
@ -128,6 +171,9 @@ Fri Jun 26 09:22:28 MDT 2015 - carnold@suse.com
|
|||||||
5535f633-dont-leak-hypervisor-stack-to-toolstacks.patch
|
5535f633-dont-leak-hypervisor-stack-to-toolstacks.patch
|
||||||
CVE-2015-3456-xsa133-qemuu.patch
|
CVE-2015-3456-xsa133-qemuu.patch
|
||||||
CVE-2015-3456-xsa133-qemut.patch
|
CVE-2015-3456-xsa133-qemut.patch
|
||||||
|
qemu-MSI-X-enable-maskall.patch
|
||||||
|
qemu-MSI-X-latch-writes.patch
|
||||||
|
x86-MSI-X-guest-mask.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jun 25 17:19:35 MDT 2015 - jfehlig@suse.com
|
Thu Jun 25 17:19:35 MDT 2015 - jfehlig@suse.com
|
||||||
|
183
xen.spec
183
xen.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package xen
|
# spec file for package xen
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -15,6 +15,7 @@
|
|||||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# needssslcertforbuild
|
# needssslcertforbuild
|
||||||
|
|
||||||
Name: xen
|
Name: xen
|
||||||
@ -158,7 +159,7 @@ BuildRequires: xorg-x11-util-devel
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
Version: 4.5.1_02
|
Version: 4.5.1_07
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel)
|
Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel)
|
||||||
License: GPL-2.0
|
License: GPL-2.0
|
||||||
@ -203,16 +204,25 @@ Source20000: xenalyze.hg.tar.bz2
|
|||||||
# Upstream patches
|
# Upstream patches
|
||||||
Patch1: 55103616-vm-assist-prepare-for-discontiguous-used-bit-numbers.patch
|
Patch1: 55103616-vm-assist-prepare-for-discontiguous-used-bit-numbers.patch
|
||||||
Patch2: 551ac326-xentop-add-support-for-qdisk.patch
|
Patch2: 551ac326-xentop-add-support-for-qdisk.patch
|
||||||
Patch3: 5548e903-domctl-don-t-truncate-XEN_DOMCTL_max_mem-requests.patch
|
Patch3: 552d0f49-x86-traps-identify-the-vcpu-in-context-when-dumping-regs.patch
|
||||||
Patch4: 5548e95d-x86-allow-to-suppress-M2P-user-mode-exposure.patch
|
Patch4: 5548e903-domctl-don-t-truncate-XEN_DOMCTL_max_mem-requests.patch
|
||||||
Patch5: 554cc211-libxl-add-qxl.patch
|
Patch5: 5548e95d-x86-allow-to-suppress-M2P-user-mode-exposure.patch
|
||||||
Patch6: 556d973f-unmodified-drivers-tolerate-IRQF_DISABLED-being-undefined.patch
|
Patch6: 554cc211-libxl-add-qxl.patch
|
||||||
Patch7: 5576f178-kexec-add-more-pages-to-v1-environment.patch
|
Patch7: 556d973f-unmodified-drivers-tolerate-IRQF_DISABLED-being-undefined.patch
|
||||||
Patch8: 55780be1-x86-EFI-adjust-EFI_MEMORY_WP-handling-for-spec-version-2.5.patch
|
Patch8: 5576f178-kexec-add-more-pages-to-v1-environment.patch
|
||||||
Patch9: 558bfaa0-x86-traps-avoid-using-current-too-early.patch
|
Patch9: 55780be1-x86-EFI-adjust-EFI_MEMORY_WP-handling-for-spec-version-2.5.patch
|
||||||
Patch10: 5592a116-nested-EPT-fix-the-handling-of-nested-EPT.patch
|
Patch10: 558bfaa0-x86-traps-avoid-using-current-too-early.patch
|
||||||
Patch11: 559b9dd6-x86-p2m-ept-don-t-unmap-in-use-EPT-pagetable.patch
|
Patch11: 5592a116-nested-EPT-fix-the-handling-of-nested-EPT.patch
|
||||||
Patch12: 559bdde5-pull-in-latest-linux-earlycpio.patch
|
Patch12: 559b9dd6-x86-p2m-ept-don-t-unmap-in-use-EPT-pagetable.patch
|
||||||
|
Patch13: 559bc633-x86-cpupool-clear-proper-cpu_valid-bit-on-CPU-teardown.patch
|
||||||
|
Patch14: 559bc64e-credit1-properly-deal-with-CPUs-not-in-any-pool.patch
|
||||||
|
Patch15: 559bc87f-x86-hvmloader-avoid-data-corruption-with-xenstore-rw.patch
|
||||||
|
Patch16: 559bdde5-pull-in-latest-linux-earlycpio.patch
|
||||||
|
Patch17: 55a62eb0-xl-correct-handling-of-extra_config-in-main_cpupoolcreate.patch
|
||||||
|
Patch18: 55a66a1e-make-rangeset_report_ranges-report-all-ranges.patch
|
||||||
|
Patch19: 55a77e4f-dmar-device-scope-mem-leak-fix.patch
|
||||||
|
Patch20: 55c1d83d-x86-gdt-Drop-write-only-xalloc-d-array.patch
|
||||||
|
Patch21: 55c3232b-x86-mm-Make-hap-shadow-teardown-preemptible.patch
|
||||||
Patch131: CVE-2015-4106-xsa131-9.patch
|
Patch131: CVE-2015-4106-xsa131-9.patch
|
||||||
Patch137: CVE-2015-3259-xsa137.patch
|
Patch137: CVE-2015-3259-xsa137.patch
|
||||||
Patch139: xsa139-qemuu.patch
|
Patch139: xsa139-qemuu.patch
|
||||||
@ -329,40 +339,42 @@ Patch605: xen.build-compare.vgabios.patch
|
|||||||
Patch606: xen.build-compare.seabios.patch
|
Patch606: xen.build-compare.seabios.patch
|
||||||
Patch607: xen.build-compare.man.patch
|
Patch607: xen.build-compare.man.patch
|
||||||
Patch608: ipxe-no-error-logical-not-parentheses.patch
|
Patch608: ipxe-no-error-logical-not-parentheses.patch
|
||||||
# Extra patches pending review
|
# MSI issues (bsc#907514 bsc#910258 bsc#918984 bsc#923967)
|
||||||
Patch801: 552d0fd2-x86-hvm-don-t-include-asm-spinlock-h.patch
|
Patch700: 552d293b-x86-vMSI-X-honor-all-mask-requests.patch
|
||||||
Patch802: 552d0fe8-x86-mtrr-include-asm-atomic.h.patch
|
Patch701: 552d2966-x86-vMSI-X-add-valid-bits-for-read-acceleration.patch
|
||||||
Patch803: 552d293b-x86-vMSI-X-honor-all-mask-requests.patch
|
Patch702: 5576f143-x86-adjust-PV-I-O-emulation-functions-types.patch
|
||||||
Patch804: 552d2966-x86-vMSI-X-add-valid-bits-for-read-acceleration.patch
|
Patch703: 55795a52-x86-vMSI-X-support-qword-MMIO-access.patch
|
||||||
Patch805: 554c7aee-x86-provide-arch_fetch_and_add.patch
|
Patch704: 5583d9c5-x86-MSI-X-cleanup.patch
|
||||||
Patch806: 554c7b00-arm-provide-arch_fetch_and_add.patch
|
Patch705: 5583da09-x86-MSI-track-host-and-guest-masking-separately.patch
|
||||||
Patch807: 55534b0a-x86-provide-add_sized.patch
|
Patch706: 55b0a218-x86-PCI-CFG-write-intercept.patch
|
||||||
Patch808: 55534b25-arm-provide-add_sized.patch
|
Patch707: 55b0a255-x86-MSI-X-maskall.patch
|
||||||
Patch809: 5555a4f8-use-ticket-locks-for-spin-locks.patch
|
Patch708: 55b0a283-x86-MSI-X-teardown.patch
|
||||||
Patch810: 5555a5b9-x86-arm-remove-asm-spinlock-h.patch
|
Patch709: 55b0a2ab-x86-MSI-X-enable.patch
|
||||||
Patch811: 5555a8ec-introduce-non-contiguous-allocation.patch
|
Patch710: 55b0a2db-x86-MSI-track-guest-masking.patch
|
||||||
Patch812: 55795a52-x86-vMSI-X-support-qword-MMIO-access.patch
|
# ticket locks
|
||||||
Patch813: 557eb55f-gnttab-per-active-entry-locking.patch
|
Patch720: 552d0fd2-x86-hvm-don-t-include-asm-spinlock-h.patch
|
||||||
Patch814: 557eb5b6-gnttab-introduce-maptrack-lock.patch
|
Patch721: 552d0fe8-x86-mtrr-include-asm-atomic.h.patch
|
||||||
Patch815: 557eb620-gnttab-make-the-grant-table-lock-a-read-write-lock.patch
|
Patch722: 554c7aee-x86-provide-arch_fetch_and_add.patch
|
||||||
Patch816: 557ffab8-evtchn-factor-out-freeing-an-event-channel.patch
|
Patch723: 554c7b00-arm-provide-arch_fetch_and_add.patch
|
||||||
Patch817: 5582bf43-evtchn-simplify-port_is_valid.patch
|
Patch724: 55534b0a-x86-provide-add_sized.patch
|
||||||
Patch818: 5582bf81-evtchn-remove-the-locking-when-unmasking-an-event-channel.patch
|
Patch725: 55534b25-arm-provide-add_sized.patch
|
||||||
Patch819: 5583d9c5-x86-MSI-X-cleanup.patch
|
Patch726: 5555a4f8-use-ticket-locks-for-spin-locks.patch
|
||||||
Patch820: 5583da09-x86-MSI-track-host-and-guest-masking-separately.patch
|
Patch727: 5555a5b9-x86-arm-remove-asm-spinlock-h.patch
|
||||||
Patch821: 5583da64-gnttab-use-per-VCPU-maptrack-free-lists.patch
|
# grant table scalability
|
||||||
Patch822: 5583da8c-gnttab-steal-maptrack-entries-from-other-VCPUs.patch
|
Patch730: 5555a8ec-introduce-non-contiguous-allocation.patch
|
||||||
Patch823: 5587d711-evtchn-clear-xen_consumer-when-clearing-state.patch
|
Patch731: 557eb55f-gnttab-per-active-entry-locking.patch
|
||||||
Patch824: 5587d779-evtchn-defer-freeing-struct-evtchn-s-until-evtchn_destroy_final.patch
|
Patch732: 557eb5b6-gnttab-introduce-maptrack-lock.patch
|
||||||
Patch825: 5587d7b7-evtchn-use-a-per-event-channel-lock-for-sending-events.patch
|
Patch733: 557eb620-gnttab-make-the-grant-table-lock-a-read-write-lock.patch
|
||||||
Patch826: 5587d7e2-evtchn-pad-struct-evtchn-to-64-bytes.patch
|
Patch734: 5583da64-gnttab-use-per-VCPU-maptrack-free-lists.patch
|
||||||
Patch850: x86-MSI-pv-unmask.patch
|
Patch735: 5583da8c-gnttab-steal-maptrack-entries-from-other-VCPUs.patch
|
||||||
Patch851: x86-pci_cfg_okay.patch
|
# event channel scalability
|
||||||
Patch852: x86-PCI-CFG-write-intercept.patch
|
Patch740: 557ffab8-evtchn-factor-out-freeing-an-event-channel.patch
|
||||||
Patch853: x86-MSI-X-maskall.patch
|
Patch741: 5582bf43-evtchn-simplify-port_is_valid.patch
|
||||||
Patch854: x86-MSI-X-teardown.patch
|
Patch742: 5582bf81-evtchn-remove-the-locking-when-unmasking-an-event-channel.patch
|
||||||
Patch855: x86-MSI-X-enable.patch
|
Patch743: 5587d711-evtchn-clear-xen_consumer-when-clearing-state.patch
|
||||||
Patch856: x86-MSI-mask.patch
|
Patch744: 5587d779-evtchn-defer-freeing-struct-evtchn-s-until-evtchn_destroy_final.patch
|
||||||
|
Patch745: 5587d7b7-evtchn-use-a-per-event-channel-lock-for-sending-events.patch
|
||||||
|
Patch746: 5587d7e2-evtchn-pad-struct-evtchn-to-64-bytes.patch
|
||||||
# Build patches
|
# Build patches
|
||||||
Patch99996: xen.stubdom.newlib.patch
|
Patch99996: xen.stubdom.newlib.patch
|
||||||
Patch99998: tmp_build.patch
|
Patch99998: tmp_build.patch
|
||||||
@ -581,6 +593,15 @@ Authors:
|
|||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
|
%patch17 -p1
|
||||||
|
%patch18 -p1
|
||||||
|
%patch19 -p1
|
||||||
|
%patch20 -p1
|
||||||
|
%patch21 -p1
|
||||||
%patch131 -p1
|
%patch131 -p1
|
||||||
%patch137 -p1
|
%patch137 -p1
|
||||||
%patch139 -p1
|
%patch139 -p1
|
||||||
@ -696,40 +717,42 @@ Authors:
|
|||||||
%patch606 -p1
|
%patch606 -p1
|
||||||
%patch607 -p1
|
%patch607 -p1
|
||||||
%patch608 -p1
|
%patch608 -p1
|
||||||
# Extra patches pending review
|
# MSI issues (bsc#907514 bsc#910258 bsc#918984 bsc#923967)
|
||||||
%patch801 -p1
|
%patch700 -p1
|
||||||
%patch802 -p1
|
%patch701 -p1
|
||||||
%patch803 -p1
|
%patch702 -p1
|
||||||
%patch804 -p1
|
%patch703 -p1
|
||||||
%patch805 -p1
|
%patch704 -p1
|
||||||
%patch806 -p1
|
%patch705 -p1
|
||||||
%patch807 -p1
|
%patch706 -p1
|
||||||
%patch808 -p1
|
%patch707 -p1
|
||||||
%patch809 -p1
|
%patch708 -p1
|
||||||
%patch810 -p1
|
%patch709 -p1
|
||||||
%patch811 -p1
|
%patch710 -p1
|
||||||
%patch812 -p1
|
# ticket locks
|
||||||
%patch813 -p1
|
%patch720 -p1
|
||||||
%patch814 -p1
|
%patch721 -p1
|
||||||
%patch815 -p1
|
%patch722 -p1
|
||||||
%patch816 -p1
|
%patch723 -p1
|
||||||
%patch817 -p1
|
%patch724 -p1
|
||||||
%patch818 -p1
|
%patch725 -p1
|
||||||
%patch819 -p1
|
%patch726 -p1
|
||||||
%patch820 -p1
|
%patch727 -p1
|
||||||
%patch821 -p1
|
# grant table scalability
|
||||||
%patch822 -p1
|
%patch730 -p1
|
||||||
%patch823 -p1
|
%patch731 -p1
|
||||||
%patch824 -p1
|
%patch732 -p1
|
||||||
%patch825 -p1
|
%patch733 -p1
|
||||||
%patch826 -p1
|
%patch734 -p1
|
||||||
%patch850 -p1
|
%patch735 -p1
|
||||||
%patch851 -p1
|
# event channel scalability
|
||||||
%patch852 -p1
|
%patch740 -p1
|
||||||
%patch853 -p1
|
%patch741 -p1
|
||||||
%patch854 -p1
|
%patch742 -p1
|
||||||
%patch855 -p1
|
%patch743 -p1
|
||||||
%patch856 -p1
|
%patch744 -p1
|
||||||
|
%patch745 -p1
|
||||||
|
%patch746 -p1
|
||||||
# Build patches
|
# Build patches
|
||||||
%patch99996 -p1
|
%patch99996 -p1
|
||||||
%patch99998 -p1
|
%patch99998 -p1
|
||||||
|
Loading…
Reference in New Issue
Block a user