diff --git a/patches.xen/Revert-x86-smpboot-Do-not-use-smp_num_siblings-in-__.patch b/patches.xen/Revert-x86-smpboot-Do-not-use-smp_num_siblings-in-__.patch new file mode 100644 index 0000000..5e584a3 --- /dev/null +++ b/patches.xen/Revert-x86-smpboot-Do-not-use-smp_num_siblings-in-__.patch @@ -0,0 +1,36 @@ +From 09c7513ec86caec1a1c304cf34d512011712f5c4 Mon Sep 17 00:00:00 2001 +From: Simon Gaiser +Date: Wed, 7 Feb 2018 18:30:53 +0100 +Subject: [PATCH 1/2] Revert "x86/smpboot: Do not use smp_num_siblings in + __max_logical_packages calculation" + +This reverts commit 947134d9b00f342415af7eddd42a5fce7262a1b9. +--- + arch/x86/kernel/smpboot.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c +index ed556d50d7ed..3dd6a6a5ffbc 100644 +--- a/arch/x86/kernel/smpboot.c ++++ b/arch/x86/kernel/smpboot.c +@@ -106,7 +106,7 @@ EXPORT_SYMBOL(__max_logical_packages); + static unsigned int logical_packages __read_mostly; + + /* Maximum number of SMT threads on any online core */ +-int __read_mostly __max_smt_threads = 1; ++int __max_smt_threads __read_mostly; + + /* Flag to indicate if a complete sched domain rebuild is required */ + bool x86_topology_update; +@@ -1291,7 +1291,7 @@ void __init native_smp_cpus_done(unsigned int max_cpus) + * Today neither Intel nor AMD support heterogenous systems so + * extrapolate the boot cpu's data to all packages. + */ +- ncpus = cpu_data(0).booted_cores * topology_max_smt_threads(); ++ ncpus = cpu_data(0).booted_cores * smp_num_siblings; + __max_logical_packages = DIV_ROUND_UP(nr_cpu_ids, ncpus); + pr_info("Max logical packages: %u\n", __max_logical_packages); + +-- +2.15.1 + diff --git a/patches.xen/Revert-x86-smpboot-Fix-__max_logical_packages-estima.patch b/patches.xen/Revert-x86-smpboot-Fix-__max_logical_packages-estima.patch new file mode 100644 index 0000000..15f292b --- /dev/null +++ b/patches.xen/Revert-x86-smpboot-Fix-__max_logical_packages-estima.patch @@ -0,0 +1,101 @@ +From 3379207879b4f1b6dff0cca0a713d5309e045c12 Mon Sep 17 00:00:00 2001 +From: Simon Gaiser +Date: Wed, 7 Feb 2018 18:31:03 +0100 +Subject: [PATCH 2/2] Revert "x86/smpboot: Fix __max_logical_packages estimate" + +This reverts commit b4c0a7326f5dc0ef7a64128b0ae7d081f4b2cbd1. +--- + arch/x86/kernel/smpboot.c | 55 ++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 45 insertions(+), 10 deletions(-) + +diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c +index 3dd6a6a5ffbc..72b3eb321b49 100644 +--- a/arch/x86/kernel/smpboot.c ++++ b/arch/x86/kernel/smpboot.c +@@ -301,6 +301,12 @@ int topology_update_package_map(unsigned int pkg, unsigned int cpu) + if (new >= 0) + goto found; + ++ if (logical_packages >= __max_logical_packages) { ++ pr_warn("Package %u of CPU %u exceeds BIOS package data %u.\n", ++ logical_packages, cpu, __max_logical_packages); ++ return -ENOSPC; ++ } ++ + new = logical_packages++; + if (new != pkg) { + pr_info("CPU %u Converting physical %u to logical package %u\n", +@@ -311,6 +317,44 @@ int topology_update_package_map(unsigned int pkg, unsigned int cpu) + return 0; + } + ++static void __init smp_init_package_map(struct cpuinfo_x86 *c, unsigned int cpu) ++{ ++ unsigned int ncpus; ++ ++ /* ++ * Today neither Intel nor AMD support heterogenous systems. That ++ * might change in the future.... ++ * ++ * While ideally we'd want '* smp_num_siblings' in the below @ncpus ++ * computation, this won't actually work since some Intel BIOSes ++ * report inconsistent HT data when they disable HT. ++ * ++ * In particular, they reduce the APIC-IDs to only include the cores, ++ * but leave the CPUID topology to say there are (2) siblings. ++ * This means we don't know how many threads there will be until ++ * after the APIC enumeration. ++ * ++ * By not including this we'll sometimes over-estimate the number of ++ * logical packages by the amount of !present siblings, but this is ++ * still better than MAX_LOCAL_APIC. ++ * ++ * We use total_cpus not nr_cpu_ids because nr_cpu_ids can be limited ++ * on the command line leading to a similar issue as the HT disable ++ * problem because the hyperthreads are usually enumerated after the ++ * primary cores. ++ */ ++ ncpus = boot_cpu_data.x86_max_cores; ++ if (!ncpus) { ++ pr_warn("x86_max_cores == zero !?!?"); ++ ncpus = 1; ++ } ++ ++ __max_logical_packages = DIV_ROUND_UP(total_cpus, ncpus); ++ pr_info("Max logical packages: %u\n", __max_logical_packages); ++ ++ topology_update_package_map(c->phys_proc_id, cpu); ++} ++ + void __init smp_store_boot_cpu_info(void) + { + int id = 0; /* CPU 0 */ +@@ -318,7 +362,7 @@ void __init smp_store_boot_cpu_info(void) + + *c = boot_cpu_data; + c->cpu_index = id; +- topology_update_package_map(c->phys_proc_id, id); ++ smp_init_package_map(c, id); + c->initialized = true; + } + +@@ -1284,16 +1328,7 @@ void __init native_smp_prepare_boot_cpu(void) + + void __init native_smp_cpus_done(unsigned int max_cpus) + { +- int ncpus; +- + pr_debug("Boot done\n"); +- /* +- * Today neither Intel nor AMD support heterogenous systems so +- * extrapolate the boot cpu's data to all packages. +- */ +- ncpus = cpu_data(0).booted_cores * smp_num_siblings; +- __max_logical_packages = DIV_ROUND_UP(nr_cpu_ids, ncpus); +- pr_info("Max logical packages: %u\n", __max_logical_packages); + + if (x86_has_numa_in_package) + set_sched_topology(x86_numa_in_package_topology); +-- +2.15.1 + diff --git a/series.conf b/series.conf index e504ec6..bc26dbe 100644 --- a/series.conf +++ b/series.conf @@ -37,6 +37,10 @@ patches.xen/Revert-xen-optimize-xenbus-driver-for-multiple-concu.patch # Upstream patch for 4.15 patches.xen/x86-xen-init-gs-very-early-to-avoid-page-faults-with.patch +# Workaround for regression in 4.15 in smpboot.c +patches.xen/Revert-x86-smpboot-Do-not-use-smp_num_siblings-in-__.patch +patches.xen/Revert-x86-smpboot-Fix-__max_logical_packages-estima.patch + # Hardware-specific fixes, backported from newer kernel and/or developers branches patches.backports/v2-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch patches.backports/Input-synaptics---add-Intertouch-support-on-X1-Carbon-6th-and-X280.patch