This works as expected but let's add this to prevent regressions. Signed-off-by: Stephen Finucane <step...@that.guru> --- .../tests/series/base-no-references-no-cover.mbox | 304 +++++++++++++++++++++ patchwork/tests/test_series.py | 19 ++ 2 files changed, 323 insertions(+) create mode 100644 patchwork/tests/series/base-no-references-no-cover.mbox
diff --git a/patchwork/tests/series/base-no-references-no-cover.mbox b/patchwork/tests/series/base-no-references-no-cover.mbox new file mode 100644 index 0000000..9e1752f --- /dev/null +++ b/patchwork/tests/series/base-no-references-no-cover.mbox @@ -0,0 +1,304 @@ +From m...@linux.vnet.ibm.com Tue May 23 15:15:11 2017 +To: linuxppc-...@lists.ozlabs.org, linux-ker...@vger.kernel.org +From: Michael Bringmann <m...@linux.vnet.ibm.com> +Subject: [PATCH 0/2] powerpc/dlpar: Correct display of hot-add/hot-remove CPUs + and memory +Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>, + Paul Mackerras <pau...@samba.org>, + Michael Ellerman <m...@ellerman.id.au>, + Reza Arbab <ar...@linux.vnet.ibm.com>, + Thomas Gleixner <t...@linutronix.de>, + Bharata B Rao <bhar...@linux.vnet.ibm.com>, + Balbir Singh <bsinghar...@gmail.com>, + Nathan Fontenot <nf...@linux.vnet.ibm.com>, + Michael Bringmann <m...@linux.vnet.ibm.com>, + Shailendra Singh <shailend...@nvidia.com>, + "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>, + Sebastian Andrzej Siewior <bige...@linutronix.de>, + Andrew Donnellan <andrew.donnel...@au1.ibm.com>, + John Allen <jal...@linux.vnet.ibm.com>, + Tyrel Datwyler <tyr...@linux.vnet.ibm.com>, + Sahil Mehta <sahilmeht...@gmail.com>, + Rashmica Gupta <rashm...@gmail.com>, + Ingo Molnar <mi...@kernel.org>, + Thomas Gleixner <t...@linutronix.de> +Date: Tue, 23 May 2017 10:15:11 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +Message-Id: <790af26b-7055-7997-2080-f967aef2d...@linux.vnet.ibm.com> +List-ID: <linux-kernel.vger.kernel.org> + +powerpc/numa: Correct the currently broken capability to set the +topology for shared CPUs in LPARs. At boot time for shared CPU +lpars, the topology for each shared CPU is set to node zero, however, +this is now updated correctly using the Virtual Processor Home Node +(VPHN) capabilities information provided by the pHyp. The VPHN handling +in Linux is disabled, if PRRN handling is present. + +powerpc/hotplug-memory: Removing or adding memory via the PowerPC +hotplug interface shows anomalies in the association between memory +and nodes. The code was updated to better take advantage of defined +nodes in order to associate memory to nodes not needed at boot time, +but relevant to dynamically added memory. + +Signed-off-by: Michael Bringmann <m...@linux.vnet.ibm.com> + +Michael Bringmann (2): + powerpc/numa: Update CPU topology when VPHN enabled + powerpc/hotplug-memory: Fix hot-add memory node assoc + + +From m...@linux.vnet.ibm.com Tue May 23 15:15:29 2017 +To: linuxppc-...@lists.ozlabs.org, linux-ker...@vger.kernel.org +From: Michael Bringmann <m...@linux.vnet.ibm.com> +Subject: [PATCH 1/2] powerpc/numa: Update CPU topology when VPHN enabled +Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>, + Paul Mackerras <pau...@samba.org>, + Michael Ellerman <m...@ellerman.id.au>, + Reza Arbab <ar...@linux.vnet.ibm.com>, + Thomas Gleixner <t...@linutronix.de>, + Bharata B Rao <bhar...@linux.vnet.ibm.com>, + Balbir Singh <bsinghar...@gmail.com>, + Michael Bringmann <m...@linux.vnet.ibm.com>, + Shailendra Singh <shailend...@nvidia.com>, + "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>, + Sebastian Andrzej Siewior <bige...@linutronix.de>, + Nathan Fontenot <nf...@linux.vnet.ibm.com>, + Andrew Donnellan <andrew.donnel...@au1.ibm.com>, + John Allen <jal...@linux.vnet.ibm.com>, + Tyrel Datwyler <tyr...@linux.vnet.ibm.com>, + Sahil Mehta <sahilmeht...@gmail.com>, + Rashmica Gupta <rashm...@gmail.com>, + Ingo Molnar <mi...@kernel.org> +Date: Tue, 23 May 2017 10:15:29 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +Message-Id: <4a1bec9a-d3d2-c0bd-3956-e6e402be3...@linux.vnet.ibm.com> +List-ID: <linux-kernel.vger.kernel.org> + +powerpc/numa: Correct the currently broken capability to set the +topology for shared CPUs in LPARs. At boot time for shared CPU +lpars, the topology for each shared CPU is set to node zero, however, +this is now updated correctly using the Virtual Processor Home Node +(VPHN) capabilities information provided by the pHyp. The VPHN handling +in Linux is disabled, if PRRN handling is present. + +Signed-off-by: Michael Bringmann <m...@linux.vnet.ibm.com> +--- + arch/powerpc/mm/numa.c | 19 ++++++++++++++++++- + arch/powerpc/platforms/pseries/dlpar.c | 2 ++ + arch/powerpc/platforms/pseries/hotplug-cpu.c | 3 ++- + 3 files changed, 22 insertions(+), 2 deletions(-) + +diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c +index 371792e..15c2dd5 100644 +--- a/arch/powerpc/mm/numa.c ++++ b/arch/powerpc/mm/numa.c +@@ -29,6 +29,7 @@ + #include <linux/seq_file.h> + #include <linux/uaccess.h> + #include <linux/slab.h> ++#include <linux/sched.h> + #include <asm/cputhreads.h> + #include <asm/sparsemem.h> + #include <asm/prom.h> +@@ -42,6 +43,8 @@ + #include <asm/vdso.h> + + static int numa_enabled = 1; ++static int topology_inited; ++static int topology_update_needed; + + static char *cmdline __initdata; + +@@ -1321,8 +1324,11 @@ int arch_update_cpu_topology(void) + struct device *dev; + int weight, new_nid, i = 0; + +- if (!prrn_enabled && !vphn_enabled) ++ if (!prrn_enabled && !vphn_enabled) { ++ if (!topology_inited) ++ topology_update_needed = 1; + return 0; ++ } + + weight = cpumask_weight(&cpu_associativity_changes_mask); + if (!weight) +@@ -1361,6 +1367,8 @@ int arch_update_cpu_topology(void) + cpumask_andnot(&cpu_associativity_changes_mask, + &cpu_associativity_changes_mask, + cpu_sibling_mask(cpu)); ++ pr_info("Assoc chg gives same node %d for cpu%d\n", ++ new_nid, cpu); + cpu = cpu_last_thread_sibling(cpu); + continue; + } +@@ -1377,6 +1385,9 @@ int arch_update_cpu_topology(void) + cpu = cpu_last_thread_sibling(cpu); + } + ++ if (i) ++ updates[i-1].next = NULL; ++ + pr_debug("Topology update for the following CPUs:\n"); + if (cpumask_weight(&updated_cpus)) { + for (ud = &updates[0]; ud; ud = ud->next) { +@@ -1423,6 +1434,7 @@ int arch_update_cpu_topology(void) + + out: + kfree(updates); ++ topology_update_needed = 0; + return changed; + } + +@@ -1600,6 +1612,11 @@ static int topology_update_init(void) + if (!proc_create("powerpc/topology_updates", 0644, NULL, &topology_ops)) + return -ENOMEM; + ++ topology_inited = 1; ++ if (topology_update_needed) ++ bitmap_fill(cpumask_bits(&cpu_associativity_changes_mask), ++ nr_cpumask_bits); ++ + return 0; + } + device_initcall(topology_update_init); +diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c +index bda18d8..5106263 100644 +--- a/arch/powerpc/platforms/pseries/dlpar.c ++++ b/arch/powerpc/platforms/pseries/dlpar.c +@@ -592,6 +592,8 @@ static ssize_t dlpar_show(struct class *class, struct class_attribute *attr, + + static int __init pseries_dlpar_init(void) + { ++ arch_update_cpu_topology(); ++ + pseries_hp_wq = alloc_workqueue("pseries hotplug workqueue", + WQ_UNBOUND, 1); + return sysfs_create_file(kernel_kobj, &class_attr_dlpar.attr); +diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c +index 7bc0e91..b5eff35 100644 +--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c ++++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c +@@ -619,7 +619,8 @@ static int dlpar_cpu_remove_by_index(u32 drc_index) + } + + rc = dlpar_cpu_remove(dn, drc_index); +- of_node_put(dn); ++ if (rc) ++ of_node_put(dn); + return rc; + } + + + +From m...@linux.vnet.ibm.com Tue May 23 15:15:44 2017 +To: linuxppc-...@lists.ozlabs.org, linux-ker...@vger.kernel.org +Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>, + Paul Mackerras <pau...@samba.org>, + Michael Ellerman <m...@ellerman.id.au>, + Reza Arbab <ar...@linux.vnet.ibm.com>, + Thomas Gleixner <t...@linutronix.de>, + Bharata B Rao <bhar...@linux.vnet.ib>, + Balbir Singh <bsinghar...@gmail.com>, + Michael Bringmann <m...@linux.vnet.ibm.com>, + Shailendra Singh <shailend...@nvidia.com>, + "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>, + Sebastian Andrzej Siewior <bige...@linutronix.de> +From: Michael Bringmann <m...@linux.vnet.ibm.com> +Subject: [Patch 2/2]: powerpc/hotplug/mm: Fix hot-add memory node assoc +Date: Tue, 23 May 2017 10:15:44 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +Message-Id: <3bb44d92-b2ff-e197-4bdf-ec6d588d6...@linux.vnet.ibm.com> +List-ID: <linux-kernel.vger.kernel.org> + +Removing or adding memory via the PowerPC hotplug interface shows +anomalies in the association between memory and nodes. The code +was updated to initialize more possible nodes to make them available +to subsequent DLPAR hotplug-memory operations, even if they are not +needed at boot time. + +Signed-off-by: Michael Bringmann <m...@linux.vnet.ibm.com> +--- + arch/powerpc/mm/numa.c | 44 ++++++++++++++++++++++++++++++++------------ + 1 file changed, 32 insertions(+), 12 deletions(-) + +diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c +index 15c2dd5..3d58c1f 100644 +--- a/arch/powerpc/mm/numa.c ++++ b/arch/powerpc/mm/numa.c +@@ -870,7 +870,7 @@ void __init dump_numa_cpu_topology(void) + } + + /* Initialize NODE_DATA for a node on the local memory */ +-static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn) ++static void setup_node_data(int nid, u64 start_pfn, u64 end_pfn) + { + u64 spanned_pages = end_pfn - start_pfn; + const size_t nd_size = roundup(sizeof(pg_data_t), SMP_CACHE_BYTES); +@@ -878,23 +878,41 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn) + void *nd; + int tnid; + +- nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid); +- nd = __va(nd_pa); ++ if (!node_data[nid]) { ++ nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid); ++ nd = __va(nd_pa); + +- /* report and initialize */ +- pr_info(" NODE_DATA [mem %#010Lx-%#010Lx]\n", +- nd_pa, nd_pa + nd_size - 1); +- tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); +- if (tnid != nid) +- pr_info(" NODE_DATA(%d) on node %d\n", nid, tnid); ++ node_data[nid] = nd; ++ memset(NODE_DATA(nid), 0, sizeof(pg_data_t)); ++ NODE_DATA(nid)->node_id = nid; ++ ++ /* report and initialize */ ++ pr_info(" NODE_DATA [mem %#010Lx-%#010Lx]\n", ++ nd_pa, nd_pa + nd_size - 1); ++ tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); ++ if (tnid != nid) ++ pr_info(" NODE_DATA(%d) on node %d\n", nid, tnid); ++ } else { ++ nd_pa = (u64) node_data[nid]; ++ nd = __va(nd_pa); ++ } + +- node_data[nid] = nd; +- memset(NODE_DATA(nid), 0, sizeof(pg_data_t)); +- NODE_DATA(nid)->node_id = nid; + NODE_DATA(nid)->node_start_pfn = start_pfn; + NODE_DATA(nid)->node_spanned_pages = spanned_pages; + } + ++static void setup_nodes(void) ++{ ++ int i, l = 32 /* MAX_NUMNODES */; ++ ++ for (i = 0; i < l; i++) { ++ if (!node_possible(i)) { ++ setup_node_data(i, 0, 0); ++ node_set(i, node_possible_map); ++ } ++ } ++} ++ + void __init initmem_init(void) + { + int nid, cpu; +@@ -914,6 +932,8 @@ void __init initmem_init(void) + */ + nodes_and(node_possible_map, node_possible_map, node_online_map); + ++ setup_nodes(); ++ + for_each_online_node(nid) { + unsigned long start_pfn, end_pfn; + diff --git a/patchwork/tests/test_series.py b/patchwork/tests/test_series.py index 181fc6d..0a33b75 100644 --- a/patchwork/tests/test_series.py +++ b/patchwork/tests/test_series.py @@ -222,6 +222,25 @@ class BaseSeriesTest(_BaseTestCase): self.assertSerialized(patches, [2]) + def test_no_references_no_cover(self): + """Series received with no reference headers or cover letter. + + Parse a series with a cover letter and two patches that is received + without any reference headers. + + Input: + - [PATCH 0/2] powerpc/dlpar: Correct display of hot-add/hot-remove + CPUs + - [PATCH 1/2] powerpc/numa: Update CPU topology when VPHN enabled + - [Patch 2/2]: powerpc/hotplug/mm: Fix hot-add memory node assoc + """ + covers, patches, _ = self._parse_mbox( + 'base-no-references-no-cover.mbox', [1, 2, 0]) + + self.assertSerialized(patches, [2]) + self.assertSerialized(covers, [1]) + + class RevisedSeriesTest(_BaseTestCase): """Tests for a series plus a single revision. -- 2.9.4 _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork