Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808392/?format=api
{ "id": 808392, "url": "http://patchwork.ozlabs.org/api/patches/808392/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/ab71f6fe-4afa-16ce-ee95-4f255a4ece44@linux.vnet.ibm.com/", "project": { "id": 2, "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api", "name": "Linux PPC development", "link_name": "linuxppc-dev", "list_id": "linuxppc-dev.lists.ozlabs.org", "list_email": "linuxppc-dev@lists.ozlabs.org", "web_url": "https://github.com/linuxppc/wiki/wiki", "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git", "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/", "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/", "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}" }, "msgid": "<ab71f6fe-4afa-16ce-ee95-4f255a4ece44@linux.vnet.ibm.com>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/ab71f6fe-4afa-16ce-ee95-4f255a4ece44@linux.vnet.ibm.com/", "date": "2017-08-31T19:28:31", "name": "[V12] powerpc/vphn: Update CPU topology when VPHN enabled", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "05dc8b61fe8ad68644af4ce976575219647f7663", "submitter": { "id": 65104, "url": "http://patchwork.ozlabs.org/api/people/65104/?format=api", "name": "Michael Bringmann", "email": "mwb@linux.vnet.ibm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/ab71f6fe-4afa-16ce-ee95-4f255a4ece44@linux.vnet.ibm.com/mbox/", "series": [ { "id": 895, "url": "http://patchwork.ozlabs.org/api/series/895/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=895", "date": "2017-08-31T19:28:31", "name": "[V12] powerpc/vphn: Update CPU topology when VPHN enabled", "version": 12, "mbox": "http://patchwork.ozlabs.org/series/895/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808392/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808392/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>", "X-Original-To": [ "patchwork-incoming@ozlabs.org", "linuxppc-dev@lists.ozlabs.org" ], "Delivered-To": [ "patchwork-incoming@ozlabs.org", "linuxppc-dev@lists.ozlabs.org" ], "Received": [ "from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjssD0XHTz9s8V\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 1 Sep 2017 05:30:08 +1000 (AEST)", "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xjssC5cl4zDqXr\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 1 Sep 2017 05:30:07 +1000 (AEST)", "from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n\t[148.163.156.1])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xjsqW1SKkzDqXc\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tFri, 1 Sep 2017 05:28:38 +1000 (AEST)", "from pps.filterd (m0098394.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv7VJOOWZ140150\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 31 Aug 2017 15:28:36 -0400", "from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2cpmybtpj1-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 31 Aug 2017 15:28:36 -0400", "from localhost\n\tby e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@lists.ozlabs.org> from <mwb@linux.vnet.ibm.com>;\n\tThu, 31 Aug 2017 13:28:35 -0600", "from b03cxnp08025.gho.boulder.ibm.com (9.17.130.17)\n\tby e31.co.us.ibm.com (192.168.1.131) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tThu, 31 Aug 2017 13:28:33 -0600", "from b03ledav004.gho.boulder.ibm.com\n\t(b03ledav004.gho.boulder.ibm.com [9.17.130.235])\n\tby b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v7VJSW8S1769966; Thu, 31 Aug 2017 12:28:32 -0700", "from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 8555678063;\n\tThu, 31 Aug 2017 13:28:32 -0600 (MDT)", "from oc1554177480.ibm.com (unknown [9.53.92.230])\n\tby b03ledav004.gho.boulder.ibm.com (Postfix) with ESMTP id 2B3B878066;\n\tThu, 31 Aug 2017 13:28:32 -0600 (MDT)" ], "To": "linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org", "From": "Michael Bringmann <mwb@linux.vnet.ibm.com>", "Subject": "[PATCH V12] powerpc/vphn: Update CPU topology when VPHN enabled", "Organization": "IBM Linux Technology Center", "Date": "Thu, 31 Aug 2017 14:28:31 -0500", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.0", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=utf-8", "Content-Language": "en-US", "Content-Transfer-Encoding": "7bit", "X-TM-AS-GCONF": "00", "x-cbid": "17083119-8235-0000-0000-00000C33F0BE", "X-IBM-SpamModules-Scores": "", "X-IBM-SpamModules-Versions": "BY=3.00007642; HX=3.00000241; KW=3.00000007;\n\tPH=3.00000004; SC=3.00000226; SDB=6.00910339; UDB=6.00456655;\n\tIPR=6.00690619; \n\tBA=6.00005563; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009;\n\tZB=6.00000000; \n\tZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016947;\n\tXFM=3.00000015; UTC=2017-08-31 19:28:34", "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused", "x-cbparentid": "17083119-8236-0000-0000-00003D7659D6", "Message-Id": "<ab71f6fe-4afa-16ce-ee95-4f255a4ece44@linux.vnet.ibm.com>", "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-31_07:, , signatures=0", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708310289", "X-BeenThere": "linuxppc-dev@lists.ozlabs.org", "X-Mailman-Version": "2.1.23", "Precedence": "list", "List-Id": "Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>", "List-Unsubscribe": "<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>", "List-Archive": "<http://lists.ozlabs.org/pipermail/linuxppc-dev/>", "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>", "List-Help": "<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>", "List-Subscribe": "<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>", "Cc": "Nathan Fontenot <nfont@linux.vnet.ibm.com>,\n\tMichael Bringmann <mwb@linux.vnet.ibm.com>,\n\tJohn Allen <jallen@linux.vnet.ibm.com>", "Errors-To": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org", "Sender": "\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>" }, "content": "powerpc/numa: On Power systems with shared configurations of CPUs\nand memory, there are some issues with the association of additional\nCPUs and memory to nodes when hot-adding resources. This patch\naddresses some of those problems.\n\nFirst, it corrects the currently broken capability to set the\ntopology for shared CPUs in LPARs. At boot time for shared CPU\nlpars, the topology for each CPU was being set to node zero. Now\nwhen numa_update_cpu_topology() is called appropriately, the Virtual\nProcessor Home Node (VPHN) capabilities information provided by the\npHyp allows the appropriate node in the shared configuration to be\nselected for the CPU.\n\nNext, it updates the initialization checks to independently recognize\nPRRN or VPHN support.\n\nNext, during hotplug CPU operations, it resets the timer on topology\nupdate work function to a small value to better ensure that the CPU\ntopology is detected and configured sooner.\n\nAlso, fix an end-of-updates processing problem observed occasionally\nin numa_update_cpu_topology().\n\nSigned-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>\n---\nChanges in V12:\n -- Reorganize some of the updates to minimize kernel impact.\n -- Improve documentation of this patch.\n---\n arch/powerpc/include/asm/topology.h | 8 +++\n arch/powerpc/mm/numa.c | 65 ++++++++++++++++++++++++--\n arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 +\n 3 files changed, 69 insertions(+), 6 deletions(-)", "diff": "diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h\nindex dc4e159..600e1c6 100644\n--- a/arch/powerpc/include/asm/topology.h\n+++ b/arch/powerpc/include/asm/topology.h\n@@ -98,6 +98,14 @@ static inline int prrn_is_enabled(void)\n }\n #endif /* CONFIG_NUMA && CONFIG_PPC_SPLPAR */\n \n+#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_NEED_MULTIPLE_NODES)\n+#if defined(CONFIG_PPC_SPLPAR)\n+extern int timed_topology_update(int nsecs);\n+#else\n+#define\ttimed_topology_update(nsecs)\t0\n+#endif /* CONFIG_PPC_SPLPAR */\n+#endif /* CONFIG_HOTPLUG_CPU || CONFIG_NEED_MULTIPLE_NODES */\n+\n #include <asm-generic/topology.h>\n \n #ifdef CONFIG_SMP\ndiff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c\nindex b95c584..c8b965f 100644\n--- a/arch/powerpc/mm/numa.c\n+++ b/arch/powerpc/mm/numa.c\n@@ -1148,11 +1148,32 @@ struct topology_update_data {\n \tint new_nid;\n };\n \n+#define\tTOPOLOGY_DEF_TIMER_SECS\t\t60\n+\n static u8 vphn_cpu_change_counts[NR_CPUS][MAX_DISTANCE_REF_POINTS];\n static cpumask_t cpu_associativity_changes_mask;\n static int vphn_enabled;\n static int prrn_enabled;\n static void reset_topology_timer(void);\n+static int topology_timer_secs = 1;\n+static int topology_inited;\n+static int topology_update_needed;\n+\n+/*\n+ * Change polling interval for associativity changes.\n+ */\n+int timed_topology_update(int nsecs)\n+{\n+\tif (nsecs > 0)\n+\t\ttopology_timer_secs = nsecs;\n+\telse\n+\t\ttopology_timer_secs = TOPOLOGY_DEF_TIMER_SECS;\n+\n+\tif (vphn_enabled)\n+\t\treset_topology_timer();\n+\n+\treturn 0;\n+}\n \n /*\n * Store the current values of the associativity change counters in the\n@@ -1246,6 +1267,11 @@ static long vphn_get_associativity(unsigned long cpu,\n \t\t\t\"hcall_vphn() experienced a hardware fault \"\n \t\t\t\"preventing VPHN. Disabling polling...\\n\");\n \t\tstop_topology_update();\n+\t\tbreak;\n+\tcase H_SUCCESS:\n+\t\tdbg(\"VPHN hcall succeeded. Reset polling...\\n\");\n+\t\ttimed_topology_update(0);\n+\t\tbreak;\n \t}\n \n \treturn rc;\n@@ -1323,8 +1349,11 @@ int numa_update_cpu_topology(bool cpus_locked)\n \tstruct device *dev;\n \tint weight, new_nid, i = 0;\n \n-\tif (!prrn_enabled && !vphn_enabled)\n+\tif (!prrn_enabled && !vphn_enabled) {\n+\t\tif (!topology_inited)\n+\t\t\ttopology_update_needed = 1;\n \t\treturn 0;\n+\t}\n \n \tweight = cpumask_weight(&cpu_associativity_changes_mask);\n \tif (!weight)\n@@ -1363,6 +1392,8 @@ int numa_update_cpu_topology(bool cpus_locked)\n \t\t\tcpumask_andnot(&cpu_associativity_changes_mask,\n \t\t\t\t\t&cpu_associativity_changes_mask,\n \t\t\t\t\tcpu_sibling_mask(cpu));\n+\t\t\tpr_info(\"Assoc chg gives same node %d for cpu%d\\n\",\n+\t\t\t\t\tnew_nid, cpu);\n \t\t\tcpu = cpu_last_thread_sibling(cpu);\n \t\t\tcontinue;\n \t\t}\n@@ -1379,6 +1410,13 @@ int numa_update_cpu_topology(bool cpus_locked)\n \t\tcpu = cpu_last_thread_sibling(cpu);\n \t}\n \n+\t/*\n+\t * Prevent processing of 'updates' from overflowing array\n+\t * in cases where last entry filled in a 'next' pointer.\n+\t */\n+\tif (i)\n+\t\tupdates[i-1].next = NULL;\n+\n \tpr_debug(\"Topology update for the following CPUs:\\n\");\n \tif (cpumask_weight(&updated_cpus)) {\n \t\tfor (ud = &updates[0]; ud; ud = ud->next) {\n@@ -1433,6 +1471,7 @@ int numa_update_cpu_topology(bool cpus_locked)\n \n out:\n \tkfree(updates);\n+\ttopology_update_needed = 0;\n \treturn changed;\n }\n \n@@ -1453,6 +1492,13 @@ static void topology_schedule_update(void)\n \tschedule_work(&topology_work);\n }\n \n+void shared_topology_update(void)\n+{\n+\tif (firmware_has_feature(FW_FEATURE_VPHN) &&\n+\t\t lppaca_shared_proc(get_lppaca()))\n+\t\ttopology_schedule_update();\n+}\n+\n static void topology_timer_fn(unsigned long ignored)\n {\n \tif (prrn_enabled && cpumask_weight(&cpu_associativity_changes_mask))\n@@ -1469,7 +1515,7 @@ static void topology_timer_fn(unsigned long ignored)\n static void reset_topology_timer(void)\n {\n \ttopology_timer.data = 0;\n-\ttopology_timer.expires = jiffies + 60 * HZ;\n+\ttopology_timer.expires = jiffies + topology_timer_secs * HZ;\n \tmod_timer(&topology_timer, topology_timer.expires);\n }\n \n@@ -1519,15 +1565,14 @@ int start_topology_update(void)\n \tif (firmware_has_feature(FW_FEATURE_PRRN)) {\n \t\tif (!prrn_enabled) {\n \t\t\tprrn_enabled = 1;\n-\t\t\tvphn_enabled = 0;\n #ifdef CONFIG_SMP\n \t\t\trc = of_reconfig_notifier_register(&dt_update_nb);\n #endif\n \t\t}\n-\t} else if (firmware_has_feature(FW_FEATURE_VPHN) &&\n+\t}\n+\tif (firmware_has_feature(FW_FEATURE_VPHN) &&\n \t\t lppaca_shared_proc(get_lppaca())) {\n \t\tif (!vphn_enabled) {\n-\t\t\tprrn_enabled = 0;\n \t\t\tvphn_enabled = 1;\n \t\t\tsetup_cpu_associativity_change_counters();\n \t\t\tinit_timer_deferrable(&topology_timer);\n@@ -1550,7 +1595,8 @@ int stop_topology_update(void)\n #ifdef CONFIG_SMP\n \t\trc = of_reconfig_notifier_unregister(&dt_update_nb);\n #endif\n-\t} else if (vphn_enabled) {\n+\t}\n+\tif (vphn_enabled) {\n \t\tvphn_enabled = 0;\n \t\trc = del_timer_sync(&topology_timer);\n \t}\n@@ -1613,9 +1659,16 @@ static int topology_update_init(void)\n \tif (topology_updates_enabled)\n \t\tstart_topology_update();\n \n+\tshared_topology_update();\n+\n \tif (!proc_create(\"powerpc/topology_updates\", 0644, NULL, &topology_ops))\n \t\treturn -ENOMEM;\n \n+\ttopology_inited = 1;\n+\tif (topology_update_needed)\n+\t\tbitmap_fill(cpumask_bits(&cpu_associativity_changes_mask),\n+\t\t\t\t\tnr_cpumask_bits);\n+\n \treturn 0;\n }\n device_initcall(topology_update_init);\ndiff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c\nindex 6afd1ef..5a7fb1e 100644\n--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c\n+++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c\n@@ -356,6 +356,7 @@ static int dlpar_online_cpu(struct device_node *dn)\n \t\t\tBUG_ON(get_cpu_current_state(cpu)\n \t\t\t\t\t!= CPU_STATE_OFFLINE);\n \t\t\tcpu_maps_update_done();\n+\t\t\ttimed_topology_update(1);\n \t\t\trc = device_online(get_cpu_device(cpu));\n \t\t\tif (rc)\n \t\t\t\tgoto out;\n@@ -522,6 +523,7 @@ static int dlpar_offline_cpu(struct device_node *dn)\n \t\t\t\tset_preferred_offline_state(cpu,\n \t\t\t\t\t\t\t CPU_STATE_OFFLINE);\n \t\t\t\tcpu_maps_update_done();\n+\t\t\t\ttimed_topology_update(1);\n \t\t\t\trc = device_offline(get_cpu_device(cpu));\n \t\t\t\tif (rc)\n \t\t\t\t\tgoto out;\n", "prefixes": [ "V12" ] }