diff --git a/57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch b/57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch new file mode 100644 index 0000000..566bb27 --- /dev/null +++ b/57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch @@ -0,0 +1,144 @@ +References: bsc#900418 + +# Commit cd42ccb27f4e364b6e75b6fecb06bb99ad8da988 +# Date 2016-06-08 14:12:45 +0200 +# Author Jan Beulich +# Committer Jan Beulich +kexec: allow relaxed placement specification via command line + +Rather than just allowing a fixed address or fully automatic placement, +also allow for specifying an upper bound. Especially on EFI systems, +where firmware memory use is commonly less predictable than on legacy +BIOS ones, this makes success of the reservation more likely when +automatic placement is not an option (e.g. because of special DMA +restrictions of devices involved in actually carrying out the dump). + +Also take the opportunity to actually add text to the "crashkernel" +entry in the command line option doc. + +Signed-off-by: Jan Beulich +Reviewed-by: Andrew Cooper +Reviewed-by: David Vrabel +Reviewed-by: Daniel Kiper + +--- a/docs/misc/xen-command-line.markdown ++++ b/docs/misc/xen-command-line.markdown +@@ -458,7 +458,18 @@ Specify the maximum address to allocate + combination with the `low_crashinfo` command line option. + + ### crashkernel +-> `= :[,...][@]` ++> `= :[,...][{@,<}]` ++> `= [{@,<}]` ++ ++Specify sizes and optionally placement of the crash kernel reservation ++area. The `:` pairs indicate how much memory to ++set aside for a crash kernel (``) for a given range of installed ++RAM (``). Each `` is of the form ++`-[]`. ++ ++A trailing `@` specifies the exact address this area should be ++placed at, whereas `<` in place of `@` just specifies an upper bound of ++the address range the area should fall into. + + ### credit2\_balance\_over + > `= ` +--- a/xen/arch/x86/setup.c ++++ b/xen/arch/x86/setup.c +@@ -1044,13 +1044,23 @@ void __init noreturn __start_xen(unsigne + } + + #ifdef CONFIG_KEXEC +- /* Don't overlap with modules. */ +- e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), +- mod, mbi->mods_count, -1); +- if ( !kexec_crash_area.start && (s < e) ) ++ /* ++ * Looking backwards from the crash area limit, find a large ++ * enough range that does not overlap with modules. ++ */ ++ while ( !kexec_crash_area.start ) + { +- e = (e - kexec_crash_area.size) & PAGE_MASK; +- kexec_crash_area.start = e; ++ /* Don't overlap with modules. */ ++ e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), ++ mod, mbi->mods_count, -1); ++ if ( s >= e ) ++ break; ++ if ( e > kexec_crash_area_limit ) ++ { ++ e = kexec_crash_area_limit & PAGE_MASK; ++ continue; ++ } ++ kexec_crash_area.start = (e - kexec_crash_area.size) & PAGE_MASK; + } + #endif + } +--- a/xen/common/kexec.c ++++ b/xen/common/kexec.c +@@ -60,6 +60,7 @@ static unsigned char vmcoreinfo_data[VMC + static size_t vmcoreinfo_size = 0; + + xen_kexec_reserve_t kexec_crash_area; ++paddr_t __initdata kexec_crash_area_limit = ~(paddr_t)0; + static struct { + u64 start, end; + unsigned long size; +@@ -86,7 +87,7 @@ static void *crash_heap_current = NULL, + /* + * Parse command lines in the format + * +- * crashkernel=:[,...][@] ++ * crashkernel=:[,...][{@,<}
] + * + * with being of form + * +@@ -94,7 +95,7 @@ static void *crash_heap_current = NULL, + * + * as well as the legacy ones in the format + * +- * crashkernel=[@] ++ * crashkernel=[{@,<}
] + */ + static void __init parse_crashkernel(const char *str) + { +@@ -109,7 +110,7 @@ static void __init parse_crashkernel(con + { + printk(XENLOG_WARNING "crashkernel: too many ranges\n"); + cur = NULL; +- str = strchr(str, '@'); ++ str = strpbrk(str, "@<"); + break; + } + +@@ -154,9 +155,16 @@ static void __init parse_crashkernel(con + } + else + kexec_crash_area.size = parse_size_and_unit(cur = str, &str); +- if ( cur != str && *str == '@' ) +- kexec_crash_area.start = parse_size_and_unit(cur = str + 1, &str); +- if ( cur == str ) ++ if ( cur != str ) ++ { ++ if ( *str == '@' ) ++ kexec_crash_area.start = parse_size_and_unit(cur = str + 1, &str); ++ else if ( *str == '<' ) ++ kexec_crash_area_limit = parse_size_and_unit(cur = str + 1, &str); ++ else ++ printk(XENLOG_WARNING "crashkernel: '%s' ignored\n", str); ++ } ++ if ( cur && cur == str ) + printk(XENLOG_WARNING "crashkernel: memory value expected\n"); + } + custom_param("crashkernel", parse_crashkernel); +--- a/xen/include/xen/kexec.h ++++ b/xen/include/xen/kexec.h +@@ -14,6 +14,7 @@ typedef struct xen_kexec_reserve { + } xen_kexec_reserve_t; + + extern xen_kexec_reserve_t kexec_crash_area; ++extern paddr_t kexec_crash_area_limit; + + extern bool_t kexecing; + diff --git a/575e9ca0-nested-vmx-Validate-host-VMX-MSRs-before-accessing-them.patch b/575e9ca0-nested-vmx-Validate-host-VMX-MSRs-before-accessing-them.patch new file mode 100644 index 0000000..0604975 --- /dev/null +++ b/575e9ca0-nested-vmx-Validate-host-VMX-MSRs-before-accessing-them.patch @@ -0,0 +1,62 @@ +# Commit 5e02972646132ad98c365ebfcfcb43b40a0dde36 +# Date 2016-06-13 12:44:32 +0100 +# Author Euan Harris +# Committer Andrew Cooper +nested vmx: Validate host VMX MSRs before accessing them + +Some VMX MSRs may not exist on certain processor models, or may +be disabled because of configuration settings. It is only safe to +access these MSRs if configuration flags in other MSRs are set. These +prerequisites are listed in the Intel 64 and IA-32 Architectures +Software Developer’s Manual, Vol 3, Appendix A. + +nvmx_msr_read_intercept() does not check the prerequisites before +accessing MSR_IA32_VMX_PROCBASED_CTLS2, MSR_IA32_VMX_EPT_VPID_CAP, +MSR_IA32_VMX_VMFUNC on the host. Accessing these MSRs from a nested +VMX guest running on a host which does not support them will cause +Xen to crash with a GPF. + +Signed-off-by: Euan Harris +Acked-by: Kevin Tian +Reviewed-by: Jan Beulich +Reviewed-by: Andrew Cooper + +--- a/xen/arch/x86/hvm/vmx/vvmx.c ++++ b/xen/arch/x86/hvm/vmx/vvmx.c +@@ -1820,11 +1820,22 @@ int nvmx_msr_read_intercept(unsigned int + return 0; + + /* +- * Those MSRs are available only when bit 55 of +- * MSR_IA32_VMX_BASIC is set. ++ * These MSRs are only available when flags in other MSRs are set. ++ * These prerequisites are listed in the Intel 64 and IA-32 ++ * Architectures Software Developer’s Manual, Vol 3, Appendix A. + */ + switch ( msr ) + { ++ case MSR_IA32_VMX_PROCBASED_CTLS2: ++ if ( !cpu_has_vmx_secondary_exec_control ) ++ return 0; ++ break; ++ ++ case MSR_IA32_VMX_EPT_VPID_CAP: ++ if ( !(cpu_has_vmx_ept || cpu_has_vmx_vpid) ) ++ return 0; ++ break; ++ + case MSR_IA32_VMX_TRUE_PINBASED_CTLS: + case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: + case MSR_IA32_VMX_TRUE_EXIT_CTLS: +@@ -1832,6 +1843,11 @@ int nvmx_msr_read_intercept(unsigned int + if ( !(vmx_basic_msr & VMX_BASIC_DEFAULT1_ZERO) ) + return 0; + break; ++ ++ case MSR_IA32_VMX_VMFUNC: ++ if ( !cpu_has_vmx_vmfunc ) ++ return 0; ++ break; + } + + rdmsrl(msr, host_data); diff --git a/57640448-xen-sched-use-default-scheduler-upon-an-invalid-sched.patch b/57640448-xen-sched-use-default-scheduler-upon-an-invalid-sched.patch new file mode 100644 index 0000000..5eac44b --- /dev/null +++ b/57640448-xen-sched-use-default-scheduler-upon-an-invalid-sched.patch @@ -0,0 +1,32 @@ +# Commit 9dec2c47406f4ef31711656722f5f70d758d6160 +# Date 2016-06-17 15:08:08 +0100 +# Author Dario Faggioli +# Committer George Dunlap +xen: sched: use default scheduler upon an invalid "sched=" + +instead of just the first scheduler we find in the array. + +In fact, right now, if someone makes a typo when passing +the "sched=" command line option to Xen, we (with all +schedulers configured in) pick ARINC653, which is most +likely not what one would expect. + +Go for the default scheduler instead. + +Signed-off-by: Dario Faggioli +Acked-by: George Dunlap +Reviewed-by: Andrew Cooper +Reviewed-By: Jonathan Creekmore + +--- a/xen/common/schedule.c ++++ b/xen/common/schedule.c +@@ -1625,7 +1625,8 @@ void __init scheduler_init(void) + { + printk("Could not find scheduler: %s\n", opt_sched); + for ( i = 0; i < NUM_SCHEDULERS; i++ ) +- if ( schedulers[i] ) ++ if ( schedulers[i] && ++ !strcmp(schedulers[i]->opt_name, CONFIG_SCHED_DEFAULT) ) + { + ops = *schedulers[i]; + break; diff --git a/xen.changes b/xen.changes index 3654e95..7bc16e1 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Thu Jun 23 09:45:38 MDT 2016 - carnold@suse.com + +- bsc#900418 - Dump cannot be performed on SLES12 XEN + 57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch +- Upstream patches from Jan + 575e9ca0-nested-vmx-Validate-host-VMX-MSRs-before-accessing-them.patch + 57640448-xen-sched-use-default-scheduler-upon-an-invalid-sched.patch + ------------------------------------------------------------------- Tue Jun 21 08:26:51 MDT 2016 - carnold@suse.com diff --git a/xen.spec b/xen.spec index a220b79..c124ead 100644 --- a/xen.spec +++ b/xen.spec @@ -203,6 +203,9 @@ Source57: xen-utils-0.1.tar.bz2 # For xen-libs Source99: baselibs.conf # Upstream patches +Patch1: 57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch +Patch2: 575e9ca0-nested-vmx-Validate-host-VMX-MSRs-before-accessing-them.patch +Patch3: 57640448-xen-sched-use-default-scheduler-upon-an-invalid-sched.patch # Upstream qemu-traditional patches Patch250: VNC-Support-for-ExtendedKeyEvent-client-message.patch Patch251: 0001-net-move-the-tap-buffer-into-TAPState.patch @@ -521,6 +524,9 @@ Authors: %prep %setup -q -n %xen_build_dir -a 1 -a 2 -a 5 -a 6 -a 57 # Upstream patches +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 # Upstream qemu patches %patch250 -p1 %patch251 -p1